欧拉计划 31

来源:互联网 发布:mac 音乐升降调编辑 编辑:程序博客网 时间:2024/05/21 05:21

在英国,货币是由英镑£,便士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)])# 动态规划# 这里采用递归方式求解,其它方式可参考 欧拉计划 15coin_list = [100, 50, 20, 10, 5, 2, 1]target_Val = 200num = get_coin(coin_list, target_Val, 0)print(num)
0 0
原创粉丝点击