码迷,mamicode.com
首页 > 其他好文 > 详细

背包问题

时间:2016-04-09 15:19:51      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

第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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!