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

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

gesidun7个月前 (06-03)定制153

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

相关文章

端午必看!解锁29款神仙粽子图鉴+5种手残秒会包法

宝子们!一年一度的端午盛宴即将来袭,说到端午,粽子绝对是C位担当! 你知道吗?粽子的世界远比你想象的精彩,今天就带大家开启一场粽子形态大赏,同时奉上超实用包粽秘籍,让你轻松拿捏节日仪式感! 29种粽子...

22寸行李箱尺寸换算与选择指南

1. 22寸行李箱的尺寸通常为55厘米长、42厘米宽、23厘米高。这个尺寸是以英寸为单位来表示的,而我们需要将其转换为厘米单位进行理解。换算过程很简单,即一英寸约等于2.54厘米,因此22英寸就等于大...

拆卡日常:与妈妈一起的奇妙魔法卡包体验

随着社交媒体的普及和年轻消费群体的崛起,卡片收藏成为了一种新的时尚潮流。在这个潮流中,特别是儿童和青少年的互动类产品,逐渐受到家庭的关注。最近,一段关于母女共同拆小麻薯魔法卡包的视频在短视频平台引发了...

购物袋也可以很时尚!Ball&Chain中国首发新品,久光百货独家发售

5月11日,日本环保包袋品牌Ball&中国首发新品在久光百货独家发售。记者了解到,现场首发的新品包括圆饼包、笔袋包等,以及史努比联名限定款等热门经典款回归,吸引许多消费者驻足。 中国首发新品受欢迎 “...

魔兽世界地心之战34格背包获取攻略

魔兽世界在11.0地心之战版本更新之后,一共有3个可以获取的34格背包。下面为大家分别介绍一下这三个背包的获取位置以及相关任务的流程,还没有收集到背包的玩家,可以参考以下的图文攻略步骤去游戏中进行寻找...

大牌包包英文搞笑中文翻译爆红微博 LV中枪

据悉,翻译过后,微博上还发起了“你们觉得一个大牌高端洋气上档次,主要是因为上面写的不是母语”的造句潮流,虽然这种翻译稍显夸张,但受到了粉丝们的热捧。不久又有博主晒出新翻译,“中枪”的依然是路易威登。看...