2024.04.28_学习日记
天气:中雨
学习地点:宿舍
学习时长:10h
学习内容
- 动态规划完全背包
1
2
3
4
5
6
7
8
9
10
11
12while True:
try:
n, m = map(int, input().split())
dp = [0] * (1+n) # 创建一个长度为 n+1 的数组,用于存储硬币组合数量,初始值全部为0
dp[0] = 1 # 当目标金额为0时,只有一种组合方式,即一个硬币都不选,因此令 dp[0] = 1
for j in range(1, 1+n): # 遍历硬币的面额
for i in range(1, m+1): # 遍历目标金额
if j >= i: # 如果当前硬币面额大于等于目标金额
dp[j] += dp[j-i] # 更新当前金额下的组合数量,累加之前的组合数量
print(dp[-1]) # 输出最终结果,即目标金额下的组合数量
except:
break # 如果输入异常,退出循环