完全背包问题与多重背包问题
完全背包问题与多重背包问题
完全背包问题的描述是“给定容积为V的背包与物品序列,物品i的价值与体积分别为A_i,B_i。设序列中每个物品有无限个可以取,如何取物品可使总价值最大”。《算法导论》中的钢条切割问题就是完全背包问题。
这个问题本身可以转化成(01)背包问题,虽然每种物品有无限个,但背包容量却是有限的,故对于物品i,其至多能被取\lfloor{V/B_i}\rfloor次(其中\lfloor \rfloor表示向下取整,即直接丢弃小数点后的数),从无限变为有限后就很好处理了,只需要把这些一样的物体“平铺”开就能得到一个新的物品序列,然后用这个新的物品序列求解对应的(01)背包问题即可。
按上述思路可得状态转移方程\(F(k,V)=max\{~ F(i-1,V-mB_i)… 阅读全文