0
点赞
收藏
分享

微信扫一扫

1023. 买书(完全背包方案数恰好问题)


文章目录

  • ​​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

1023. 买书(完全背包方案数恰好问题)_dp

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])


举报

相关推荐

0 条评论