【0-1背包】 问题描述:n件物品,第i件物品价值 vi 元,重wi 磅。希望用 W磅的书包 拿走最重的物品。(物品不可以分割故称为0-1背包)
【部分背包】问题描述:n件物品,第i件物品价值 vi 元,重wi 磅。希望用 W磅的背包 拿走最重的物品。第i件物品可以都拿走,也可以拿走一部分。(物品可以分割所以称为部分背包)
注意:0-1背包不能用贪心算法求解。
原因:按照贪心算法,每一次拿的都是每磅最贵的物品。由于物品大小不同,有可能每磅最贵的不是最合适大小的。最坏的情况可能导致,背包没有装满,而且当前装的也不是最优的。
例如:10磅 A 价值60¥ ; 20磅 B 价值100¥;30磅 C 价值120¥; 背包重50磅
按照贪心算法 ,应该选择 A B (160¥) 但是最优的应该是 BC(220¥)
分析:没有装满的背包降低了平均每磅物品的价值,将物品装入时必须考虑1)装入物品i后子问题的解与2)不装入物品i后子问题的解哪个最优。这样导致了许多子问题重叠,而这又恰巧是动态规划特点。
部分背包,显而易见可以用贪心算法。