P1049 [NOIP 2001 普及组] 装箱问题

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;
}