网站☞ 大体思路详解
然后关于里面有些不清楚的内容的补充:
- ❤ ❤ ❤ ❤ ❤ 01背包 ❤ ❤ ❤ ❤ ❤————f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
:)
关于从二维数组变成一维数组,在循环的时候V是逆序的原因:
因为在 i 的情况下,f [ ] 是和i - 1 有关的。
如果是正序,那么在你求 f [ v ] 的时候,实际上,f [ 0 ].....f [ v - 1] 已经改动过了,是和 i 有关的值了。
进一步解释的网站链接☞
01背包具体数据的逆序解释
:)
关于01背包初始化中负无穷的问题:
、 个人觉得实际上就是保证了在求解过程中的f [ V ] 的V是 所给的物品的体积能够加起来的值。。。。
进一步解释的网站链接☞
关于初始化的图解
:)
关于路径的记录问题: 以后补充
2.
❤ ❤ ❤ ❤ ❤ 完全背包
❤ ❤ ❤ ❤ ❤ ————f[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]}
:)
关于那个完全背包转换为01背包中的2^k没有看懂2333333 不过好像也没有辣么重要QAQ
:) 关于路径的记录问题:以后补充
:) 关于完全背包的正序问题 :
(1) for i (1 → n);
for v (w [ i ] → vmax);
f [ v ] = max { f [ v] , f [ v - c [ i ] ]+ w [ i ] };
解释:从01背包为什么要逆序我们可以知道,V正序的时候,f [ w [ i ] ]....f [ vmax ] 已经更新到了f [ i ], 因为物品可以放很多次呀。在max中,前面那一个就是在此时的v 的时候,我们选择不放入i物品;而后面那个式子,表示的是对于现在的v ,我们选择放入i 物品(但是在 f [ v - c [ i ] ] 的时候,我们可能已经选过了i 物品,这也就是和01 背包的区别)。
3. ❤ ❤ ❤ ❤ ❤ 多重背包 ❤ ❤ ❤ ❤ ❤
关于没有优化,01+完全,01三种代码的网址链接☞
大致理解
:) 进一步补充:以后补充