背包,限制使用的总物品

时间:2017-08-31 08:47:30

标签: python algorithm knapsack-problem

所以,我有一个背包,可放入背包的一些物品有一个限制,而物品的重量也有一个限制。

因此给定项目限制5和权重100: 我们会找到最适合100重量的5件物品(可以重复5倍相同的物品)。

在动态编程中,我已经解决了无界和有界(每个项目都有限制,但使用的项目总数没有限制)。但我对如何采用这种新方法感到有些困惑。这是一个多维背包问题,如体积和重量?但相反,我们想要使用的物品和重量?或者它是0-1背包改变?

如果有人能够将其分解为更小的逻辑步骤,或者指向一些可靠的代码来阅读(我的谷歌正在努力寻找解决方案),那将非常感激。

感谢您的时间!

2 个答案:

答案 0 :(得分:1)

这是多重约束的背包问题。您的新约束是项目数量的总和小于与其权重无关的某个数字。

这里有一些好方法:http://www2.math.uni-wuppertal.de/~klamroth/publications/klwidp00.pdf

您还应该尝试使用新约束来调整常规背包问题的递归关系,并查看您获得的位置。

答案 1 :(得分:1)

这可以表示为乘法约束背包问题(也称为多维背包问题)如下。

目标函数和第一维保持与当前公式相同(即权重之和)。

然后可以使用第二个维度来约束所选项目的数量。使用Wikipedia notation

  • w 2,i = 1,所有 i ;
  • W 2 =您可以选择的项目数限制(在您的示例中为5)。

以下是一些参考资料: