POJ3628 背包问题

来源:互联网 发布:数控车床编程实例大全 编辑:程序博客网 时间:2024/05/17 22:10
//01背包问题,容量为S,c[i]=w[i]=Hi,最后遍历f[],找出最小到>=b的值即可#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>using namespace std;int f[1000050],c[25];int main(){int sum,n,b;while(cin>>n>>b){sum=0;memset(f,0,sizeof(f));memset(c,0,sizeof(c));int i,j;for(i=1;i<=n;i++){cin>>c[i];sum+=c[i];}for(i=1;i<=n;i++)for(j=sum;j>=c[i];j--){f[j]=max(f[j],f[j-c[i]]+c[i]);}for(i=1;i<=sum;i++)if(f[i]>=b){cout<<f[i]-b<<endl;break;}}return 0;}

原创粉丝点击