码迷,mamicode.com
首页 > 其他好文 > 详细

sgu-248 Integer Linear Programming

时间:2015-05-19 14:49:53      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:

给你一个n(n<=3),对于x[1],x[2]....x[n]N,有约束条件满足x[1]?c[1]+x[2]?c[2]+.....+x[n]?c[n]=v(v<=106)f(x[1],x[2],...,x[n])=ni=1x[i],要求满足约束条件下的f的最大值,如果不存在就输出 ?1

解题思路:

首先看到N<=3就有一种想暴搜的冲动,但是冷静下来发现,这就是一个完全背包,并且需要把背包塞满。一共有三个物品,第i个物品的价值为1,体积为c[i],背包总容量为v,剩下的就很简单了。

AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>

using namespace std;

int F[1000010]={0};
int N,v;
int c[4]={0};

int main()
{
    scanf("%d",&N);
    for(int i=1;i<=N;i++)
        scanf("%d",&c[i]);
    scanf("%d",&v);
    for(int i=1;i<=v;i++) F[i]=2e9;
    for(int i=1;i<=N;i++)
        for(int j=c[i];j<=v;j++)
            F[j]=min(F[j],F[j-c[i]]+1);
    if(F[v]==2e9) cout<<-1<<endl;
    else cout<<F[v]<<endl;
    return 0;
}

sgu-248 Integer Linear Programming

标签:

原文地址:http://blog.csdn.net/qq_21995319/article/details/45843489

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!