【发布时间】:2016-03-28 04:07:58
【问题描述】:
我正在努力更好地理解背包问题,并正在查看此处给出的“特定动态编程解决方案”: http://rosettacode.org/wiki/Knapsack_Problem/Python
我想修改它,以便在解决方案中最多使用 items 中的每个项目。我认为这可以通过遍历重量和体积之外的项目来完成,但这不起作用。
感谢任何帮助。
编辑: 例子: 目前代码定义了一个项目列表
items = [Bounty('panacea', 3000, 3, 25),
Bounty('ichor', 1800, 2, 15),
Bounty('gold', 2500, 20, 2)]
它选择物品的最大值组合,即
我希望它选择重量和价值
【问题讨论】:
-
向我们展示您目前拥有的东西,以及什么不起作用?
-
@SamSegers 我正在使用该链接的“特定动态编程解决方案”下列出的内容。现在它返回“可实现的最大值(通过动态编程)是 54500 灵丹妙药,灵药,黄金项目的数量分别是:[9,0,11]”但是,我希望它只允许在每个项目最多使用 1 个。我计划从一个包含更多项目的列表开始工作,但列表中每个项目只有一个可用单位。
-
我想你的意思是你想返回最好的项目类型作为输出?添加一个例子供读者理解。
-
@SamSegers 我编辑了原帖。
-
你可以尝试一个在 O(n * W) 中工作的众所周知的算法,其中 n 是物品的数量,W 是背包的容量。如果您想对此进行详细解答,请告诉我。
标签: algorithm dynamic-programming knapsack-problem