poj 3628 01背包问题

来源:互联网 发布:lda主题模型 python 编辑:程序博客网 时间:2024/05/16 03:24

题意: n头奶牛叠罗汉,给你个高度b,要求你找几头奶牛叠加比b高,但要求高出的值尽可能的小,问这个高出的值是多少

把奶牛的总和减去b,就是这个背包的容量,填充它,求出的最大值与背包的容量做差,结果就是他了。


#include<stdio.h>#include<string.h>int v[20000000],sum,c[100];int max(int a,int b){return a>b?a:b;}int main(){int n,b;while(scanf("%d%d",&n,&b)!=EOF){for(int i=0;i<=n;i++) v[i]=0;sum=0;for(int i=1;i<=n;i++){scanf("%d",&c[i]);sum+=c[i];}int it=sum-b;for(int i=1;i<=n;i++){for(int j=it;j>=c[i];j--){v[j]=max(v[j],v[j-c[i]]+c[i]);}}printf("%d\n",it-v[it]);}return 0;}



原创粉丝点击