01背包
假如有承重5的背包,有1(重量)——3(价值)
有2——5,有3——7
0 1 2 3 4 5
0 0 0 0 0 0 0
1 0 3 3 3 3 3
2 0 3 5 8 8 8
3 0 3 5 8 10 12
大致就是填表,从上到下,从左到右,填表规则就是寻找该位置(物品和重量限制)能获得的最大价值。
如果背包重量小于物品,价值为前一物品价值
背包重量大于物品,价值为前一物品价值和拿完以后剩下重量的价值的最大值
n 为物品,t为重量,v为价值,a[] 为重量,v[][]为价值,t[]为时间
for(i = 1 ; i < n ; i++){
for( j = 1 ; j < t ; j ++){
if(j > a[i]) v[i][j] = v[i-1][j];
if(j <= a[i]) v[i][j] = max( v[i-1][j],v[i-1][j-t[i]] + v );}
}
还对其进行了优化(空间)
滚动(一维)
注意要从后往前进行推算(防止有前边有值改动,导致后边值不准确)
本文解析了01背包问题的动态规划解法,并重点介绍了如何通过滚动数组实现空间优化,以提高算法效率。通过实例表格展示了如何根据物品重量和价值选择最优组合。
608

被折叠的 条评论
为什么被折叠?



