我有一个以下问题:
有一组项目,每个项目有2个不同的正值A和B.
背包有两个值:totalA和totalB . 这是所选项目的值A和B的最大总和 .
我必须知道,背包可以容纳的最大物品数是多少 .
Example:
Input:
总计:10,总计B:15
item1 A:3,B:4
item2 A:7,B:2
item3 A:1,B:9
item4 A:2,B:1
item5 A:4,B:6
Output:
3(项目:2,3,4)
我应该如何使用动态编程来解决这个问题?
3 回答
这被称为“多重约束背包问题”(MKP,偶尔呈现为d-KP) . 它可以在假多项式时间内解决,就像常规的背包问题一样,但是你需要一个二维表而不是一个 .
将m [i,wa,wb]定义为最大值(此处的项目数),可以通过
a
s小于或等于wa
的总和以及b
s之和小于或等于wb
来实现,使用最多i
的项目 .如果
item[i].a > wa
或item[i].b > wb
要么
如果
item[i].a <= wa
和item[i].b <= wb
这是一个可能对您有帮助的递推方程: -
注意:您可以在递归解决方案上使用哈希表实现,这将阻止三维数组 .