【发布时间】:2018-03-29 11:33:32
【问题描述】:
我需要为扩展背包问题创建算法,其中我们有特殊物品和普通物品,我只能打包几个特殊物品。
所以,我们有 N 个项目,并且我们知道每个项目的重量/价值/isSpecial。我们还定义了 S,这是特殊项目的最大数量。
有什么想法吗?
【问题讨论】:
-
请将其形式化,然后检查整数编程是否可行。
-
特殊物品限制不能和重量限制一视同仁吗?
-
@myrtlecat 不,你不能。您只有简单的项目列表,其中包含权重/值以及关于每个项目是否特殊的知识。您可以像使用普通物品一样使用特殊物品,但是每次使用特殊物品时,您都必须增加计数器,不能超过给定的数量(通常是小的)
-
如果我理解正确的话,对特殊物品的限制可以重新表述为第二个重量限制如下:普通物品的“特殊重量”为0,特殊物品的“特殊重量”为1 ,并且总的“特殊重量”不得超过 S。从数学上讲,原始重量限制和“特殊重量”限制可以同等对待,这给出了以下 @Codor 的解决方案。
-
@myrtlecat,是的,你是对的。感谢您的帮助
标签: algorithm dynamic-programming knapsack-problem