0031. 硬币和
* * * *
拉格朗日计划
* * * *
硬币和

英镑$\unicode{xA3}$和便士p是英国的基本货币单位。目前流通的硬币共有八种类面值: $$1p, 2p, 5p, 10p, 20p, 50p, \unicode{xA3}1(=100p), \unicode{xA3}2(=200p)$$ 凑成$\unicode{xA3}2$的一种做法是 $$1\times \unicode{xA3}1+ 1\times 50p + 2 \times 20 p+1\times 5p+ 1\times 2p+3\times 1p$$ 若不限制硬币数量,则凑成$\unicode{xA3}2$的做法共有几种?

本题难度:



解答

设目标价值是T便士,第一枚硬币的价值是c便士,那么只需再考察凑出$T-c$便士的方法总数。令c取遍所有可能的值后相加就是凑成T便士的方法总数,递归计算即得结果$73682$。

coins=[1,2,5,10,20,50,100,200]

nums=[1]+[0]*200

for i in range(8):
    for j in range(coins[i], len(nums)):
        nums[j]+=nums[j-coins[i]]

print nums[-1]