projecteuler---->problem=31----Coin sums 无限背包计算可能存在的次数
2014-08-21 11:09
423 查看
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=3----Largest prime factor
- projecteuler---->problem:1
- projecteuler---->problem=20----Factorial digit sum
- projecteuler---->problem=8----Largest product in a series
- projecteuler---->problem=21----Amicable numbers
- projecteuler---->problem=33----Digit canceling fractions
- projecteuler---->problem=28----Number spiral diagonals
- projecteuler---->problem=27----Quadratic primes
- projecteuler---->problem=24----Lexicographic permutations
- projecteuler---->problem:2
- projecteuler---->problem=18----Maximum path sum I
- projecteuler---->problem=15----Lattice paths
- projecteuler---->problem=16----Power digit sum
- projecteuler---->problem=30----Digit fifth powers
- projecteuler---->problem=10----Summation of primes
- projecteuler---->problem=25----1000-digit Fibonacci number
- projecteuler---->problem=13----Large sum
- projecteuler---->problem=22----Names scores
- projecteuler---->problem=32----Pandigital products
- projecteuler---->problem=5----Smallest multiple n个数求最小公倍数