//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;
}
POJ3628 背包问题
最新推荐文章于 2020-04-21 21:39:29 发布