在英国,货币是由英镑£,便士p构成的。一共有八种钱币在流通:
1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) 和 £2 (200p).
要构造£2可以用如下方法:
1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
允许使用任意数目的钱币,一共有多少种构造£2的方法?
def get_coin(coins, target, n):
"""
返回构造target的方法数
coins 货币种类
target 构造货币大小
n 构造方法
"""
if target == 0:
n += 1
return n
if len(coins) == 1:
if target % coins[0] == 0:
n += 1
return n
return sum([get_coin(coins[1:], target - coins[0] * i, n)
for i in range(target // coins[0] + 1)])
# 动态规划
# 这里采用递归方式求解,其它方式可参考 欧拉计划 15
coin_list = [100, 50, 20, 10, 5, 2, 1]
target_Val = 200
num = get_coin(coin_list, target_Val, 0)
print(num)