美文网首页
leetcode- 零钱兑换 II(背包问题-总结-复盘)

leetcode- 零钱兑换 II(背包问题-总结-复盘)

作者: 棉花糖7 | 来源:发表于2020-04-28 15:01 被阅读0次

这是完全背包问题,其中背包的容量就是 amount, 物品就是硬币,其中物品的数量是无限个的,而物品的重量,这里就是硬币的价值。因此  dp[i][j]  表示的是 前i个硬币可以凑成价值为 j 的钱数 的总的方法数。状态转移方程就是 dp[i][j] = dp[i-1][j] + dp[i][j - coins[i-1]] ,

dp[i-1][j] 表示:(不用这第i个硬币)只用 前 i-1 中硬币就可以凑出价值为 j 的总数,

dp[i][j- coins[i-1]]表示 : 要用这第i个硬币,那么就要关注如何凑出价值 j-coins[i-1]这个钱数的方法。

题目 code

经典动态规划:0-1 背包问题

0-1背包问题的变体

完全背包问题

注意:1.区分状态转移方程:dp[i][j] = dp[i - 1][j] + dp[i-1][j - nums[i - 1]]; 和 

                                               dp[i][j] = dp[i - 1][j] + dp[i][j - nums[i - 1]];

这里面的零钱可以重复选择,所以选了这个零钱之后,dp[i][j] = dp[i][j- nums[i-1]]

如果不可以重读选择 就是 dp[i][j] = dp[i - 1][j] + dp[i-1][j - nums[i - 1]]

2.j有时候要从0开始

3.降维的时候,j要倒着算,从j = sum开始减

相关文章

网友评论

      本文标题:leetcode- 零钱兑换 II(背包问题-总结-复盘)

      本文链接:https://www.haomeiwen.com/subject/bcwvwhtx.html