2024.04.28_学习日记

天气:中雨
学习地点:宿舍
学习时长:10h

学习内容

  1. 动态规划完全背包
    alt text
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while 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 # 如果输入异常,退出循环