Problem 31
In England the currency is made up of pound, £, and pence, p, and there are eight coins in general circulation:
1p, 2p, 5p, 10p, 20p, 50p, £1 (100p) and £2 (200p).
It is possible to make £2 in the following way:
1×£1 + 1×50p + 2×20p + 1×5p + 1×2p + 3×1p
How many different ways can £2 be made using any number of coins?
import time def cal(sum,count,value): if sum == 200: count += 1 return if sum > 200 : return for i in range(0,8): sum += value[i] cal(sum,count,value) sum -= value[i] begin = time.time() num={1,2,5,10,20,50,100,200}; num=list(num) count=0 cal(0,count,num) end = time.time() print count print end-begin
第一种办法,深搜超时
# # 解析:每次从列表中取出最大的coin值,得到取最大值个数的上限 # 个数叠加,接下来的用较小的数凑。 # # def cal(value, coins): if value == 0 or len(coins)==1 : return 1 else: coins = sorted(coins) largest = coins[-1] uses = value / largest total = 0 for i in range(uses+1): total += cal(value-largest*i, coins[:-1]) return total print cal(200, [1,2,5,10,20,50,100,200])
第二种 贪心凑极值 AC
projecteuler---->problem=31----Coin sums 无限背包计算可能存在的次数
时间: 2024-10-07 14:00:04