P1049 [NOIP 2001 普及组] 装箱问题 - 洛谷
这个问题是典型的 0/1 背包问题,我们需要在给定的物品中选择若干个,使得它们的体积尽可能接近箱子的容量 V,并且不超过箱子的最大容量。最终的目标是使得箱子剩余的空间最小。
#include <bits/stdc++.h>
using namespace std;
const int N =1e6+10;
#define ll long long
ll v,n,w[N],f[N];
int main()
{
cin>>v>>n;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<=n;i++)
for(int j=v;j>=w[i];j--)
f[j]=max(f[j],f[j-w[i]]+w[i]);
cout<<v-f[v];
return 0;
}