首页 > 试题广场 >

硬币划分

[编程题]硬币划分
  • 热度指数:2057 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱(n <= 100000),有多少中组合可以组成n分钱?

输入描述:
输入整数n.(1<=n<=100000)


输出描述:
输出组合数,答案对1e9+7取模。
示例1

输入

13

输出

16
def calc(n):
    n = int(n)
    coins = [1, 2, 5, 10]
    
    memo = [0] * (n + 1)
    memo[0] = 1
    
    for i in coins:
        for j in range(i, n+1):
            # 必须与此数取模而非题目给的 1e9+7
            memo[j] = (memo[j] + memo[j-i]) % 1000000007

    return memo[n] 
    
print(calc(input()))

编辑于 2019-10-26 00:38:02 回复(0)

n = int(input())
n_5 = n//5
idea = 0
for x in range(n_5+1):
    idea += (x//2+1)*((n-5*x)//2+1)
print(int(idea%(1e9+7)))
 运行时间: 46 ms 占用内存:3556K
编辑于 2019-09-28 22:30:59 回复(0)
n = int(input())
m = [1] + [0]*n
for i in (1,2,5,10):
    for j in range(i,n+1):
        m[j] = (m[j] + m[j-i]) % 1000000007
print(m[-1])


发表于 2019-09-17 01:11:20 回复(0)
#请帮忙看看哪里有问题,部分通过,大数不行
#枚举,从大到小,依次枚举计数
n = int(input(''))
list1=0
for i in range(0,(n//10)+1):
    shi = 10*i
    for j in range(0,((n-shi)//5)+1):
        wu = 5*j
        list1=list1+((n-shi-wu)//2)+1
print(list1)
编辑于 2019-09-12 22:25:21 回复(1)