文章目录
- Question
- Ideas
- Code
- 朴素版
- 优化
Question
小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。
问小明有多少种买书方案?(每种书可购买多本)
输入格式
一个整数 n,代表总共钱数。
输出格式
一个整数,代表选择方案种数。
数据范围
0≤n≤1000
输入样例1:
20
输出样例1:
2
输入样例2:
15
输出样例2:
0
输入样例3:
0
输出样例3:
1
Ideas
Code
朴素版
# 完全背包朴素版 O(4*N)
N = 1010
f = [[0 for i in range(N)] for i in range(5)]
f[0][0] = 1
n = int(input())
lis = [0,10,20,50,100]
for i in range(1,5):
for j in range(n+1):
f[i][j] += f[i-1][j]
if j >= lis[i]:
f[i][j] += f[i][j-lis[i]]
print(f[4][n])
优化
# 优化版
N = 1010
f = [0 for i in range(N)]
f[0] = 1
n = int(input())
lis = [0,10,20,50,100]
for i in range(1,5):
for j in range(lis[i],n+1):
f[j] += f[j-lis[i]]
print(f[n])