01背包问题
只不过这里的价值换成了背包容量
一样的解题思路
#include<iostream>
using namespace std;
int dp[40][20010];
int v[40];
int main()
{
int volume,n;
cin>>volume>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=volume;j++)
{
if(j<v[i]) dp[i][j]=dp[i-1][j];
else dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+v[i]);
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=volume;j++)
// cout << dp[i][j] << ' ';
// cout<<endl;
// }
cout<<volume-dp[n][volume];
return 0;
}