给定总金额为A的一张纸币,现要兑换成面额分别为a1,a2,....,an的硬币,且希望所得到的硬币个数最少。
# -*- coding:utf-8 -*-
import time
def rec_mc(coin_value_list, change, known_results):
min_coins = change
if change in coin_value_list:
known_results[change] = 1
return 1
elif known_results[change] > 0:
return known_results[change]
else:
for i in [c for c in coin_value_list if c <= change]:
num_coins = 1 + rec_mc(coin_value_list, change - i, known_results)
if num_coins < min_coins:
min_coins = num_coins
known_results[change] = min_coins
return min_coins
if __name__ == '__main__':
memo = [0] * 64
print(time.clock())
print(rec_mc([1, 5, 10, 25], 63, memo))
print(time.clock())