C++ 代码
/*
01背包问题 每种物品只能使用一次
背包的总体积V:箱子容量 V
物品的个数N:n个物品
每种物品的体积vi:物品的体积v
每种物品的价值wi:物品的体积v
目标:要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
转化:装入的体积越大,剩余空间就越小
*/
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e4+10;
int f[N];
int main()
{
int V,n;
cin>>V;
cin>>n;
for(int i=0;i<n;i++)
{
int v;
cin>>v;
for(int j=V;j>=v;j--)
f[j]=max(f[j],f[j-v]+v);
}
cout<<V-f[V]<<endl;
return 0;
}