sgu-248 Integer Linear Programming

来源:互联网 发布:网络诈骗主题班会ppt 编辑:程序博客网 时间:2024/05/18 04:00

题目大意:

给你一个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;}
0 0
原创粉丝点击