# 动态规划:找零 defrecMC(coinValueList,change): minCoins = change if change in coinValueList: return1 else: for coin in [c for c in coinValueList if c<=change]: numCoins = 1+recMC(coinValueList,change-coin) if numCoins<minCoins: minCoins = numCoins return minCoins
defrecDC(coinValueList,change,knownResults): minCoins = change if knownResults[change]>0: return knownResults[change]
if change in coinValueList: knownResults[change] = 1 return1 else: for coin in [c for c in coinValueList if c<=change]: if knownResults[change]>0: numCoins = knownResults[change] else: numCoins = 1+recMC(coinValueList,change-coin) if numCoins<minCoins: minCoins = numCoins knownResults[change] = minCoins return minCoins
defdpMakeChange(coinValueList,change): minCoins = [0]*(change+1) for cents inrange(change+1): minCoins[cents] = cents for coin in [c for c in coinValueList if c<=cents]: numCoins = minCoins[cents-coin]+1 if numCoins<minCoins[cents]: minCoins[cents] = numCoins return minCoins[change]
defdpMakeChange_evol(coinValueList,change): minCoins = [0] * (change + 1) coinUsed = [0] * (change + 1) for cents inrange(1,change + 1): minCoins[cents] = cents+1 for coin in [c for c in coinValueList if c <= cents]: numCoins = minCoins[cents - coin] + 1 if numCoins < minCoins[cents]: minCoins[cents] = numCoins coinUsed[cents] = coin return minCoins[change]