背包问题 新手详解

来源:互联网 发布:淘宝企业开店费用 编辑:程序博客网 时间:2024/05/21 09:01

网站☞ 大体思路详解


然后关于里面有些不清楚的内容的补充:

  1. ❤ ❤ ❤ ❤ ❤   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三种代码的网址链接☞大致理解
    
                   :)  进一步补充:以后补充



                   


原创粉丝点击