第四十四天|dp

文章介绍了0-1背包和完全背包在动态规划中的应用,分别展示了如何使用动态规划解决CoinChangeII和CombinationSumIV这两个问题。对于CoinChangeII,目标是计算给定金额有几种不同的找零方法,而CombinationSumIV则是求解有序排列的组合总数。两种问题都涉及遍历物品和目标重量或金额,但顺序不同,且在更新动态规划数组时的策略也有所区别。
摘要由CSDN通过智能技术生成

今天的题都是完全背包的题.0-1背包指的是dp[i]代表不重复的装物品,装到第重量为i时的最大的价值总和.完全背包定义相似,不同点在于物品是可以重复放的

0-1背包的遍历顺序是物品遍历前序target遍历后续.而完全背包则全是前序遍历

518. Coin Change II

这道题dp[i]代表的是acmount到i为止能有多少种装法(没有顺序).那么 dp[i]+=dp[i-coin],初始化dp[0]=1因为至少有一种方法.这里因为不是求最值而是方法数.这道题是求有多少种组合并不是排列,所以要先遍历物品然后遍历target

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        dp=[0 for _ in range(amount+1)]
        dp[0]=1
        for c in coins:
            for i in range(c,amount+1):
                dp[i]+=dp[i-c]
        return dp[-1]

377. Combination Sum IV

这道题和上一道题相似,只是因为求的是排列,所以是有顺序的,那么要先遍历target然后再遍历物品.初值还是dp[0]=1

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp=[0 for _ in range(target+1)]
        dp[0]=1
        for j in range(1,target+1):
            for n in nums:
                if j-n>=0:
                    dp[j]+=dp[j-n]
        return dp[-1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值