# 找零钱问题(递归)
def recDC(coinValueList, change, knownResults):
minCoins = change
if change in coinValueList:
knownResults[change] = 1
return 1
elif knownResults[change] > 0:
return knownResults[change]
else:
for i in [c for c in coinValueList if c <= change]:
numCoins = 1 + recDC(coinValueList, change - i,
knownResults) # 边界条件
if numCoins < minCoins:
minCoins = numCoins
knownResults[change] = minCoins
return minCoins
# 找零钱问题(动态规划)
def dpMakeChange(coinValueList, change, minCoins, coinUsed):
for cents in range(change+1):
coinCount = cents
newCoin = 1
for j in [c for c in coinValueList if c <= cents]:
if minCoins[cents - j] + 1 < coinCount:
coinCount = minCoins[cents - j] + 1
newCoin = j
minCoins[cents] = coinCount
coinUsed[cents] = newCoin
return minCoins[change]
def printCoins(coinUsed, change):
coin = change
while coin > 0:
thisCoin = coinUsed[coin]
print(thisCoin)
coin -= thisCoin
if __name__ == '__main__':
cl = [1, 5, 10, 21, 25]
coinsUsed = [0] * 64
coinCount = [0] * 64
result = dpMakeChange(cl, 63, coinsUsed, coinCount)
找零问题(美元硬币)
最新推荐文章于 2025-05-02 19:27:56 发布