Two Dimension Bag - 二维背包
问题
现有个珠宝(共种,每种个),已知第个珠宝的价值是,重量是,重量是。给你一个背包,你可以自由挑选珠宝装到背包中,但背包可以装载的最大重量为,最大重量为。求背包能够装载珠宝的最大价值。
该问题与01背包的区别就是,重量属性变成了维属性,背包中所有珠宝的总重量不能超过,总重量不能超过。
解法
设为背包中放入前件物品,重量不大于,重量不大于的最大价值,其中,,。有如下状态转移方程:
初始化,背包中没有放入任何珠宝时;
对于第个珠宝时,若装进背包,则背包的价值增大,剩余重量减小,剩余重量减小,即(其中);若不装入背包,则一切维持不变,即。选择这两种情形中的最大值;
即为个珠宝中重量不超,重量不超过的最大价值。该算法的时间复杂度是。