当前位置:首页 > 定制 > 正文内容

动态规划 | 完全背包理论基础 518. 零钱兑换 II 377. 组合总和 Ⅳ 卡码网57. 爬楼梯

gesidun12个月前 (06-03)定制229

完全背包理论基础 每件物品都有无限个(也就是可以放入背包多次)dp

表示从下标为

0-i

的物品,每个物品可以取无限次,放进容量为j的背包,价值总和最大是多少递推公式:放物品和 不放物品,要取最大值。具体而言:对于物品1,不放的最大价值为60;放的最大价值为15【因为1可以多次放,dp

表示0,1物品取无限次,放入背包1的最大价值】

递推公式: dp

= max(dp

i - 1

, dp

j -

+

完全背包-一维数组:dp

= max(dp

, dp

j -

+

),从前向后遍历 518. 零钱兑换 II

题目链接: 518. 零钱兑换 II - 力扣()

思路 注意:题目中说的是组合数,那么

1,1,2

1,2,1

是相同的组合,属于重复情况,因为本题 中的所有值 互不相同,所以不需要我们去重。**二维dp数值 dp

:使用 下标为

0, i

能够凑满j这么大容量的包,有dp

种组合方法。一维dp数值,如果求组合数就是外层for循环遍历物品,内层for遍历背包。

如果求排列数就是外层for遍历背包,内层for循环遍历物品。

代码

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

一维数组

class Solution:
    def change(self, amount: int, coins: List[int]) -> int:
        dp = [0]*(amount+1)
        dp[0] = 1
        for coin in coins:
            for j in range(amount+1):
                if j>=coin:
                    dp[j] += dp[j-coin]
        return dp

377. 组合总和 Ⅳ

题目链接: 377. 组合总和 Ⅳ- 力扣()

思路 本题中顺序不同的序列被视作不同的组合【不懂原理】 代码

class Solution:
    def combinationSum4(self, nums: List[int], target: int) -> int:
        dp = [0]*(target+1)
        dp[0] = 1
        for j in range(target+1):
            for num in nums:
                if j>=num:
                    dp[j] += dp[j-num]
        return dp[-1]

卡码网57. 爬楼梯

题目链接: 卡码网57. 爬楼梯 - 力扣()

思路 完全背包问题,和377. 组合总和 Ⅳ类似 代码

def climbing_stairs(n,m):
    dp = [0]*(n+1)
    dp[0] = 1
    for j in range(n+1):
        for i in range(1,m+1):
            if j>=i:
                dp[j] += dp[j-i]
    return dp[-1]
n,m = list(map(int,input().split(' ')))
print(climbing_stairs(n,m))

相关文章

mcm双肩包是什么牌子的(mcm双肩包所有款式)

大家好,宅配来为大家解答以下问题,关于mcm双肩包是什么牌子的,mcm双肩包所有款式很多人还不知道,今天让我们一起来看看吧! m标志的背包是什么牌子 1、m标志的包包是知名欧州新奢华时尚服装品牌MCM...

出事了!高铁行李箱砸人惊魂:乘务员失职还是箱主疏忽?

最近,有个让人心惊的事件引起了大家的关注:一位女士在高铁上被掉落的行李箱砸中了,结果吓得崩溃大哭。更让人气愤的是,她不仅没得到道歉,反而被怪了。这事儿在网上掀起了讨论,大家的看法可真是不一而足。 首先...

二手奢侈品种草|9月大牌包包人气榜单|奢侈品包包

9月大牌包包人气榜单新鲜出炉啦!速速查收~抓住9月最后的小尾巴~ LV的首次荣登榜首,对于马上即将到来的冬天,这么一款包包简直太合适不过了~棕色的色调与冬天也配了吧! 19这次也是挤进三甲,恭喜恭喜~...

不同尺寸的拉杆箱大小是怎么样的

随着人们经济收入水平的不断提高,很多人为暂时跳出枯燥的生活,经常是呼朋唤友来一场说走就走的旅行。而说到旅行,选择一款时尚耐用、尺寸合适的拉杆箱是非常重要的。而很多人在选购拉杆箱的时候由于不知道箱体整体...

橱柜啥颜色最聚财风水学餐厅厨房橱柜颜色哪些好

橱柜啥颜色最聚财风水学餐厅厨房橱柜颜色哪些好 我们在厨房装修的情况下,有很多人由于不清楚如何选择橱柜的颜色,我们在挑选橱柜颜色的情况下,不仅要依据住宅的室内装修风格来决定,并且橱柜的颜色也是有聚财的作...

就算房子再小,7类东西要收纳好,不然,家会越来越乱!

相信不少人都有过这样的经历,在刚入住新家时,感觉家里宽敞干净舒适。但在入住一段时间后,发现家里慢慢变得越来越凌乱,甚至到了让人惨不忍睹的地步。 原因是当初在装修时,没有预留足够的收纳空间,导致越来越多...