m[i][j]: (剩余)j体积下前i个物品的最大价值
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int v[100]; //每个物品的价值
int w[100] //每个物品的重量
int d[100][100]={0}; //m[i][j] (剩余)j体积下前i个物品的最大价值 初值就是为0! 因为并不是每个物品都一定要装的
int n, m;
cin>>n>>m; //n件物品 总容量m
for(int i=1;i<=n;i++) cin>>w[i]>>v[i]; //输入体积 价值
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++) //!! j要循环是因为想以w[i]为分界填表
{
//不能装下 则当前价值等于前i-1个物品
if(j<w[i]) d[i][j]=d[i-1][j];
// 能装 需进行决策是否选择第i个物品 max(不装,装)
else if(j>=w[i])
{
d[i][j]=max(d[i-1][j],d[i-1][j-w[i]]+v[i])
}
}
}
cout<<d[n][m];
return 0;
}