【发布时间】:2021-12-29 14:31:59
【问题描述】:
我试图解决一个 dp 问题(检查给定数量是否可以用具有不同值的给定硬币分解,假设每个有价值的硬币都有无限数量的硬币)
def istrue(coins, amount):
if (amount - coins[0] > 0):
holder = False
while (holder == False and len(coins) != 0):
holder = holder or istrue(coins, amount - coins[0])
if(len(coins) != 0):
coins.pop(0)
return holder
elif (amount - coins[0] < 0):
return False
else:
return True
并且不确定什么是迭代给定硬币的合适方法。 目前,我在 while 循环中遇到了麻烦。 (如果剩余要分解的数量大于硬币的当前价值,它会移动到下一个硬币)但是要分解的数量也会后退一步,因为我使用了 pop.. 解决此问题的任何提示?示例)硬币:[7,3]。数量:20。-> 当它达到 6 (20-7-7) 时,硬币数组的索引继续移动,但数量也被备份了一步,因为我对其进行了 pop()。
【问题讨论】:
-
不要自己存储面额。按顺序排列硬币,尝试从最大的硬币开始分解,并为每个 DP 步骤存储您到达当前步骤的硬币索引
-
“面额”是变量“硬币”吗?当你说你有无限数量的硬币时,你的意思是无限数量的面额吗?还是无限多的钱?我对你在这里想要完成的事情感到困惑。
-
例如你总共有 20 个,首先分解后你有 13 个(记住硬币 7 的索引),然后你有 6 个(记住硬币 7 的索引),然后是 3(记住硬币 3 的索引),然后是 0(记住硬币 3 的索引) )。如果你需要恢复一个面额,重复你的步骤——你记住了 3,然后是 3,然后是 7,然后是 7
-
很抱歉给您带来了困惑。我的意思是有限数量的硬币类型和每种类型的无限数量的硬币。
-
谢谢大家的回答和cmets!经过所有的帮助,我设法弄清楚了:)
标签: python dynamic-programming