代码随想录算法训练营第四十四天|70. 爬楼梯(进阶版)

70. 爬楼梯(进阶版)

多重背包问题,代取商品就是从1:m的数组,背包的容量就是n,由于是求方法数,所以递推公式为

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

因为是排序问题,所以需要先循环容量,后循环商品

322. 零钱兑换

此题是求最小的情况,也就是把背包装满所用的最小的商品数,

初始化中除了dp[0]是正常初始化,其他的dp[i]值都采用INT_MAX进行初始化

因为无论排列和组合,求出的最小商品数都是相同的,所以可以先循环容量,再循环商品,反过来也行。
循环的递推公式为:

if (dp[j - coins[i]] != INT_MAX) { // 如果dp[j - coins[i]]是初始值则跳过
                    dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

首先我们需要求最小值,和求最大值的情况差不多,只是把max换成了min

dp[j - coins[i]] != INT_MAX这个条件是确保在利用dp[j - coins[i]]得到dp[j]的过程中,所使用的一定是更新过的dp[j - coins[i]],防止dp[j - coins[i]]为未更新过的初始值,影响dp[j]的正常推导。

279.完全平方数

与上题相同,商品数组是由平方项构成的。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值