背包无重复:黄金的最大数量-Python代码问题

背包无重复:黄金的最大数量-Python代码问题,python,knapsack-problem,Python,Knapsack Problem,来自Coursera的算法工具箱课程 问题介绍 你会得到一套金条,你的目标是把尽可能多的黄金放进你的包里。每个小节只有一个副本,对于每个小节,您可以接受也可以不接受(因此您不能接受小节的一小部分) 问题描述 任务。给定我使用布尔数组d实现了我自己的解决方案,元素d[I][j]是真的当且仅当权重j可以通过某种方式组合,即取/不取索引为0到I的黄金。我们从包含True的行开始,该行仅用于j=0,即重量0可以通过不取任何东西来组成。下一行的计算如下-如果d[i][j]为真(对应于不获取当前黄金)或如果

来自Coursera的算法工具箱课程

问题介绍

你会得到一套金条,你的目标是把尽可能多的黄金放进你的包里。每个小节只有一个副本,对于每个小节,您可以接受也可以不接受(因此您不能接受小节的一小部分)

问题描述


任务。给定我使用布尔数组
d
实现了我自己的解决方案,元素
d[I][j]
真的
当且仅当权重
j
可以通过某种方式组合,即取/不取索引为
0
I
的黄金。我们从包含
True
的行开始,该行仅用于
j=0
,即重量
0
可以通过不取任何东西来组成。下一行的计算如下-如果
d[i][j]
为真(对应于不获取当前黄金)或如果
d[i-1][j-黄金[i]
为真(对应于获取当前黄金),则元素
d[i][j]
为真

关于你的解决方案。我建议在您的算法中进行下一次更正,dict
gold\u dict
的键应该有第二个元素等于金条的索引,而不是金条的值,也就是说,您需要在任何地方使用
gold\u dict[(权重,I)]
,而不是
gold\u dict[(权重,I)],试着做这个修正,也许你的代码可以用于所有测试!你的建议得到了纠正

我的解决方案代码如下所示:

输入:

10 3
1 4 8
输出:

9

您遗漏了读取输入的代码。此外,即使您没有获得参数,失败的测试是否有一个提示性的名称?感谢您的回答,不,失败的测试不会提供任何信息,除了确定是否产生了“错误答案”(然而,这确实意味着算法没有超过运行时间或内存使用限制)。为了简化问题本身,我已删除了主函数,但已将它们重新添加到中。@rich\u monkey\u 2004我将实现我的解决方案,并尝试更正您的解决方案,请看那里!非常感谢你!你是对的,问题在于我在我的gold_dict上使用gold[I]而不是'I'作为元组键。当我们有多个相同重量的金条时,这会触发错误,因为它们具有不同的I,但gold[I]是相同的。
9