一、问题描述
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?(物品i只有选中/未选中两种状态
二、思路
2.1状态方程
我们定义数组m[i][j],它表示背包容量为j,可选择物品为i,i+1,…,n时0-1背包问题的最优值。即从后i个物品中选择,且总体积<=j的最优解,即物品总价最大。
2.2状态转移方程
int main()
{
int w[5] = { 0 , 2 , 3 , 4 , 5 };
int v[5] = { 0 , 3 , 4 , 5 , 6 };
int bagV = 8;
int dp[5][9] = { { 0 } };
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= bagV; j++) {
if (j < w[i])
dp[i][j] = dp[i - 1][j];
else
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
}
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 9; j++) {
cout << dp[i][j] << ' ';
}
cout << endl;
}
return 0;
}