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

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

gesidun9个月前 (06-03)定制194

完全背包理论基础 每件物品都有无限个(也就是可以放入背包多次)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))

相关文章

意大利十大奢侈品牌有哪些?意大利十大奢侈品牌排行榜

意大利著名毛皮制品品牌,高级定制的皮包要搭配高超精致的人工手艺,芬迪奢华又尊贵才能得到体现,还有很多其他产品,男女配饰和香水等。 3、葆蝶家( ) 低调的风格,优越的质量和高超的工艺是葆蝶家的代名词,...

国际前TOP10奢侈品的包包有哪些?

奢侈品的包包品牌有很多,但很多的朋友都不曾详细了解。今天就以国际前排名的品牌做个简单的介绍,希望帮助爱包包的你。 奢侈品的包包当属爱马仕,起源于法国的爱马仕,有着属于法国的浪漫。忠于传统工艺,以新潮的...

大学报到要买多大的行李箱才够用

大学马上就要开学了,离家远去外地上学,到底需要带多少东西呢?很多大一新生去学校就像搬家一样,父母都陪同,带着大小七八件行李,这都觉得少。如果你是一个人出门呢?那些重到要死的行李如何处理呢? 01、日用...

uldum行李箱怎么样是哪国什么牌子,uldum箱包质量很扎实

行李箱并不是国外的大品牌,它实际上是一个中国的箱包品牌,在整个国产箱包市场上,算是一个主打性价比和品质的中档品牌,目前只在电商平台上有销量,因其创始人由几位设计师组成,所以其设计感、再加上其不错的价格...

【美食】新手也能一学就会的包包子教程

包子有很多种不同的包法和捏法,今天就教教大家怎么包包子,有详细的包包子的过程图解,让新手也能一学就会哦~ 菊花包子 这种包法是最常见的一种,其实学会了就很简单哦~ 详细步骤: 1、面皮放在左手上, 肉...

Anya Hindmarch是什么牌子,Anya Hindmarch属于什么档次

Anya 是一个非常受欢迎的国外品牌,它最大特点是风格独特、与众不同,她家的包包和鞋子,深受小仙女们的喜爱。Anya 的包包近几年有不少明星背过,尤其是前段时间章子怡背了之后让这个牌子的包包又更加火了...