01背包求解,每种物品只有一件,考虑装与不装,下面是转移方程
if (背包体积j小于物品i的体积)
f[i][j] = f[i-1][j] //背包装不下第i个物体,目前只能靠前i-1个物体装包
else
f[i][j] = max(f[i-1][j], f[i-1][j-Vi] + Wi)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,j,m,n;
int w[200],c[200],f[200][200];
cin>>m>>n;//背包容量与物品件数
for(i=1;i<=n;i++)
cin>>w[i]>>c[i];//依次输入物品重量与价值
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(j>=w[i])//如果可以装得下这个物品,求最大价值
f[i][j]=max(f[i-1][j-w[i]]+c[i],f[i-1][j]);
else//装不下的情况
f[i][j]=f[i-1][j];
}
cout<<f[n][m];//输出最大价值
return 0;
}