零钱兑换问题c语言编程,leetcode- 零钱兑换 II(背包问题-总结-复盘)

这是完全背包问题,其中背包的容量就是 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]这个钱数的方法。

b53e8c08b8a3

题目

b53e8c08b8a3

code

注意: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]]

b53e8c08b8a3

2.j有时候要从0开始

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值