我一直在评论一些动态编程问题,而且我很难在寻找最小数量的硬币来进行更改时绕过一些代码。假设我们有价值25,10和1的硬币,并且我们正在改变为30.贪婪会返回25和5(1),而最优解将返回3(10)。下面是从书中对这个问题的代码:动态规划优化硬币变化
def dpMakeChange(coinValueList,change,minCoins):
for cents in range(change+1):
coinCount = cents
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents-j] + 1 < coinCount:
coinCount = minCoins[cents-j]+1
minCoins[cents] = coinCount
return minCoins[change]
如果有人可以帮助我满脑子都在此代码(4号线是我开始感到困惑),这将是巨大的。谢谢!
什么是'minCoins'?无论如何,试图解决这个问题一般相当于背包问题(或者甚至更糟糕),所以在任何情况下寻找最佳解决方案都会非常快速地产生麻烦。 解决方案可能取决于您可以使用的硬币。 – Bakuriu
在[l for list_comprehension]中为变量写''变量在主观上是不好的,仅仅因为我没有看到太多... – Droogans
它很尴尬,但并不真的太可怕。这只是缩小了名单。同样的事情可以通过下一行中的“if”和“continue”来完成,但是无论如何。 – acjay