一维优化:
状态f[j]定义:N 件物品,背包容量j下的最优解。
代码如下:
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int N=1e3+10;
int f[N],w[N],v[N];
int n,m;
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
{
for(int j=m;j>=v[i];j--)
{
f[j]=max(f[j],f[j-v[i]]+w[i]);
}
}
cout<<f[m]<<endl;
return 0;
}
注意:这里的体积是从大到小的,是因为这里是一维的我们
需要从前面的体积更新我们当前的状态,如果从小到大,那么状态会覆盖。