入门01背包,滚动数组。
把重量和价值都看成同一个数a[i]。
使箱子的剩余空间为最小,相当于让背包装尽可能多的东西。
#include<iostream>
using namespace std;
int mymax(int a,int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
int main()
{
int v,n;
int a[35],dp[20005]={0};
cin>>v>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
for(int j=v;j>=a[i];j--)
{
dp[j]=mymax(dp[j],dp[j-a[i]]+a[i]);
}
}
cout<<v-dp[v]<<endl;
return 0;
}