标签:
第i件物品的价值为w[i],容量为v[i]。
01背包
01背包是共有n种物品,每种物品只有一件。
基本状态转移方程式为:
f[i][j]=max(f[i-1][j],f[i-1][j-v[i]+w[i]);
f[i][j]表示前 i 件物品放在容量为 j 的背包中能够得到的最大价值。
如果第i件物品不放进去,f[i][j]的最大值就是第 i-1 件物品在容量 j 时的最大值f[i-1][j];
如果第i件物品放进去,f[i][j]的最大值就是第 i-1 件物品放在 j-v[i] 时的最大值加上第 i 件物品的价值f[i-1][j-v[i]]+w[i]。
状态方程式可以简化为:
f[j]=max(f[j],f[j-v[i]]+w[i]) (j:V->0);
因为 j 是从V到0进行循环,计算 f[j] 时 f[j-v[i]] 的值还保留着上一件物品的值,并没有改变。这样就能节省很多的空间。
完全背包
标签:
原文地址:http://www.cnblogs.com/vwqv/p/5371640.html