类型: 有一个背包,容量为w,给你几种物品的体积和价值,问怎么放才能使背包总价值最高
数据:包包体积5
3件物品 价值 3 5 4
体积 2 4 1
上面的数字0-5代表背包容量为0-5时的情况
dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i])
讲真这个问题是dp的话
那么子问题是什么?
----------------------------------
我今天突然觉得原问题是:k件物品,装进背包的总价值
子问题:k-1件物品装进背包的总价值
这样解释的话应该就不难理解 f[i][j] = f[i-1][j-w[i]] + v[i]了
这不就是第i件物品加不加如的问题吗
加进去的话就更新,不加就不更新
----------------------------------
dp[ i ][ j ] 表示 在总共考虑前i件物品,且背包容量为j时所能获得的最大价值
dp[i][j]的j不是说剩余容量,而是总容量
for(i = 1; i <= n; ++i) { for(j = 0; j <= v; ++j) { dp[i][j] = dp[i-1][j]; if(vol[i] <= j) dp[i][j] = max(dp[i][j],dp[i-1][j-vol[i]] + value[i]); } }