代码随想录算法训练45 | 动态规划part07

发布时间:2024年01月13日

?70.?爬楼梯?(进阶)?

这道题目?爬楼梯之前我们做过,这次再用完全背包的思路来分析一遍?

代码随想录

?322.?零钱兑换??

如果求组合数就是外层for循环遍历物品,内层for遍历背包。

如果求排列数就是外层for遍历背包,内层for循环遍历物品。

这句话结合本题?大家要好好理解。

视频讲解:动态规划之完全背包,装满背包最少的物品件数是多少?| LeetCode:322.零钱兑换_哔哩哔哩_bilibili

代码随想录

状态转移方程的推导:

dp[j] 表示组成金额 j 所需的最小硬币数量,这里的推导过程基于以下逻辑:

假设我们有硬币面值列表 coins,当前正在考虑的硬币面值为 coins[i],我们要计算目标金额 j;

如果可以使用当前硬币面值 coins[i] 来凑成金额 j(即 j >= coins[i]),那么有两种情况:
· 不使用当前硬币 coins[i]:这时,凑成金额 j 所需的最小硬币数量就是之前已计算出的 dp[j];
· 使用至少一个当前硬币 coins[i]:首先我们需要用掉一个 coins[i] 硬币来得到金额 j - coins[i],然后再加上这次使用的1个硬币,所以总硬币数为 dp[j - coins[i]] + 1;

因此,在这两种选择中,我们应该选择硬币数量较少的那个方案作为最优解,即取两者的较小值。于是就得到了状态转移方程:

dp[j] = min(dp[j - coins[i]] + 1, dp[j]);

通过不断迭代所有硬币和所有可能的目标金额组合,最终在?dp[amount]?中得到组成目标金额所需的最小硬币数量。

?279.完全平方数??

本题?和?322.?零钱兑换?基本是一样的,大家先自己尝试做一做?

视频讲解:动态规划之完全背包,换汤不换药!| LeetCode:279.完全平方数_哔哩哔哩_bilibili

代码随想录

文章来源:https://blog.csdn.net/Hello__Word___/article/details/135567002
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。