这个相当于体积和价值一样大的01背包。
#include<iostream>
using namespace std;
const int mm=10000000;
int f[mm];
int h[22];
int i,j,k,n,b,m;
int main()
{
while(cin>>n>>b)
{
for(i=0;i<n;i++)
{
cin>>h[i];
m+=h[i];
}
memset(f,0,sizeof(f));
for(i=0;i<n;i++)
for(j=m;j>=h[i];--j)
{
if(f[j]<f[j-h[i]]+h[i])
f[j]=f[j-h[i]]+h[i];
}
int min=INT_MAX;
for(i=b;i<=m;++i)
{
if(f[i]>=b && f[i]-b<min)
min=f[i]-b;
}
cout<<min<<endl;
}
return 0;
}
本文介绍了一种解决01背包问题的优化算法实现,通过动态规划求解物品体积与价值相同情况下的最小浪费值。该算法适用于限制条件为体积等于价值的问题场景。
472

被折叠的 条评论
为什么被折叠?



