• 代码随想录 动态规划Ⅶ


    完全背包基础

    1. def test_CompletePack(weight, value, bagWeight):
    2. dp = [0] * (bagWeight + 1)
    3. for j in range(bagWeight + 1): # 遍历背包容量
    4. for i in range(len(weight)): # 遍历物品
    5. if j - weight[i] >= 0:
    6. dp[j] = max(dp[j], dp[j - weight[i]] + value[i])
    7. return dp[bagWeight]

    518. 零钱兑换 II

    给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

    请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

    假设每一种面额的硬币有无限个。 

    题目数据保证结果符合 32 位带符号整数。

    思路:经典的完全背包问题,amount时背包容量。硬币为物品的体积和价值.因为是求排列,所以物品放在外面,背包容量放在里面。

    1. class Solution:
    2. def change(self, amount: int, coins: List[int]) -> int:
    3. dp = [0 for _ in range(amount+1)]
    4. dp[0] = 1
    5. for coin in coins:
    6. for i in range(coin, amount+1):
    7. dp[i] += dp[i-coin]
    8. return dp[-1]

    377. 组合总和 Ⅳ

    给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

    题目数据保证答案符合 32 位整数范围。

    思路:与上题一样是多重背包问题,因为是求组合,因此背包容量放在外层,物品放在内层

    1. class Solution:
    2. def combinationSum4(self, nums: List[int], target: int) -> int:
    3. dp = [0] * (target + 1)
    4. dp[0] = 1
    5. for i in range(1, target + 1): # 遍历背包容量
    6. for j in nums: # 遍历物品列表
    7. if i >= j: # 当背包容量大于等于当前物品重量时更新组合总数
    8. dp[i] += dp[i - j]
    9. return dp[-1]

  • 相关阅读:
    十年前对敏捷开发的体会
    mysql16
    #力扣:LCR 182. 动态口令@FDDLC
    【数据结构与算法】链表OJ练习题
    GO 语言的函数
    使用OpenGL绘制shp文件
    面向对象 || 设计模式.未
    网络安全(黑客)——2024自学
    VCS编译时如何加载shared library(.so)库
    IaaS PaaS SaaS 的几大区别通俗理解
  • 原文地址:https://blog.csdn.net/Atuosi/article/details/133106428