问题描述:
有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是w[i],价值是v[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。
贪心 Y or N ?
因为每件物品都可以选取任意件,你也许会想到贪心算法:选取价值最高的就好了~~~ 看上去没什么毛病,但是有一个问题,就是往往无法填满背包,还有剩余空间。当然,你也许会想:用价值第二高的填充,如果还是放不下,就选第三、四高的填充。听起来似乎可行,但是很容易举出反例:两个物品:A(价值5,体积5)、B(价值8,体积7),背包大小为10。那么用上述贪心算法,只能选取一个B物品,获得价值为8。但是很明显,正解为10。所以贪心算法在这里并不适用。
最优化原理
假设完全背包的最优解为F(n1,n2,…,nN)(n1,n2 分别代表第1、第2件物品的选取数量),完全背包的子问题为,将前i种物品放入容量为t的背包并取得最大价值,其对应的解为:F(n1,n2,…,ni),假设该解不是子问题的最优解