代码随想录day45:动态规划part07:

70.爬楼梯进阶

原题:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。

示例 1: 输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。

复制代码
1 阶 + 1 阶
2 阶

示例 2: 输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。

复制代码
1 阶 + 1 阶 + 1 阶
1 阶 + 2 阶
2 阶 + 1 阶

用普通的动态规划:dp[i] = dp[i - 1] + dp[i - 2];爬到第i阶楼梯,有爬一步方法+爬两步得方法

修改题目:一步一个台阶,两个台阶,三个台阶,...,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢

  • 套入到完全背包里:1阶,2阶,... m阶就是物品nums[i],楼顶就是背包target。每一阶可以重复使用,例如跳了1阶,还可以继续跳1阶。问跳到楼顶有几种方法其实就是问装满背包有几种方法。
  • 动规五部曲:dp[i]爬到i台阶有几种方法;dp[i]+=dp[i-nums[i]];初始化:问方法数量,需要dp[0]=1为基础,其余dp[i]=0保证不影响方法得相加;遍历顺序:完全背包(背包循环要从小到大)一维:且是排列组合得数量则外层背包内层物品。

322.零钱兑换

实质:装满背包最少需要多少物品?

1dp[j]:达到金额j需要得最少硬币数

2.dp[j]=min(dp[j],dp[j-coin[i]]+1)

3.初始化dp[0]=0,dp[i]=INT_MAX求得是最小值,先赋予数组最大值才不会影响后续判断

4.遍历顺序:完全背包,内层嵌套顺序为正。无所谓排列数组合数,所以背包物品放内外都可

注意:判断数组不要越界,比如,当d[j]=MAX的时候,已经不能往下进行了,加1会越界

以及当if (dp[amount] == INT_MAX) return -1;的时候,说明dp[amount]

根本没有被更新,说明硬币怎么凑都无法满足amountcoins = [2], amount = 3

cpp 复制代码
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> dp(amount+1,INT_MAX);
        dp[0]=0;
        for(int j=0;j<=amount;j++){
            for(int i=0;i<coins.size();i++){
                if(j>=coins[i] && dp[j - coins[i]] != INT_MAX) dp[j]=min(dp[j],dp[j-coins[i]]+1);
            }
        }
        if (dp[amount] == INT_MAX) return -1;
        return dp[amount];
    }
};

279.完全平方数

cpp 复制代码
class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n+1,INT_MAX);
        dp[0]=0;
        for(int j=1;j<=n;j++){
            for(int i=1;i<=sqrt(n);i++){
                if(j>=i*i && dp[j-i*i]!=INT_MAX) dp[j]=min(dp[j],dp[j-i*i]+1);
            }
        }
        if(dp[n]==INT_MAX) return -1;
        else return dp[n];
    }
};
相关推荐
快去睡觉~几秒前
力扣1005:k次取反后最大化的数组和
数据结构·算法·leetcode
smilejingwei15 分钟前
数据分析编程第二步: 最简单的数据分析尝试
数据库·算法·数据分析·esprocspl
草莓熊Lotso1 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10
c语言·开发语言·经验分享·算法·强化
张同学的IT技术日记2 小时前
详细实例说明+典型案例实现 对迭代法进行全面分析 | C++
算法
Coovally AI模型快速验证2 小时前
全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
人工智能·深度学习·算法·机器学习·计算机视觉·目标跟踪·无人机
草莓熊Lotso2 小时前
【C++】--函数参数传递:传值与传引用的深度解析
c语言·开发语言·c++·其他·算法
不知名。。。。。。。。3 小时前
算法 ----- 链式
算法
网易独家音乐人Mike Zhou3 小时前
【Python】圆柱体内部3D点云仿真及ply文件生成,圆形3D点云检测及拟合算法
stm32·单片机·mcu·物联网·算法·点云·iot
scx201310043 小时前
20250822 组题总结
c++·算法
智驱力人工智能4 小时前
智慧工厂烟雾检测:全场景覆盖与精准防控
人工智能·算法·安全·智慧城市·烟雾检测·明火检测·安全生产