dp经典问题:爬楼梯

dp经典问题:爬楼梯


爬楼梯

三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

Step1: 识别问题

这个问题要求我们计算 小孩上到第n阶台阶有多少种方法

Step2:定义状态

d p i < − 小孩上到第 n 阶台阶的方法数量,定义为第 i 个状态 dpi <- 小孩上到第n阶台阶的方法数量,定义为 第 i 个状态 dpi<−小孩上到第n阶台阶的方法数量,定义为第i个状态

Step3:确定状态转移方程

这里 小孩每次可以上1阶,2阶或3阶 ,也就是说小孩可以从前1阶,2阶或者3阶上到当前台阶

也就是说当前状态由前三个状态决定

d p i = d p i − 1 + d p i − 2 + d p i − 3 dpi=dpi-1+dpi-2+dpi-3 dpi=dpi−1+dpi−2+dpi−3

Step4:确定初始状态和边界

d p 0 = 1 d p 1 = 1 d p 2 = 2 d p 3 = 4 dp0=1\\ dp1=1\\ dp2=2\\ dp3=4 dp0=1dp1=1dp2=2dp3=4

Step5:计算目标状态值

只需要从第四个状态开始自下而上的状态推导即可

代码

cpp 复制代码
class Solution {
public:
    int waysToStep(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        if (n == 3) return 4;

        vector<int> dp(n + 1);
        dp[0] = 1;
        dp[1] = 1;
        dp[2] = 2;
        dp[3] = 4;
        const int mod = 1000000007;

        for (int i = 4; i <= n; ++i) {
            dp[i] = ((dp[i - 1] + dp[i - 2]) % mod + dp[i - 3]) % mod;
        }
        return dp[n];
    }
};
相关推荐
qq_452396231 小时前
第四篇:《索引原理与实战:B-tree、Hash、GIN、GiST、BRIN》
算法·哈希算法·gin
西索斯coding2 小时前
Qwen3-Max 与 Qwen-Plus:60 个真实修复任务评测方案
大数据·网络·算法·ai
INGNIGHT2 小时前
440 · 背包问题(三)(无限次数)
算法·leetcode·动态规划
suhan2 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
killerbasd3 小时前
总结 10.26
算法
深圳安锐科技有限公司3 小时前
从成像尺度到亚像素解算:变焦视觉位移监测如何让远近断面都稳
图像处理·人工智能·深度学习·算法·计算机视觉·系统架构·结构健康监测
一只旭宝3 小时前
回调函数(Callback)
linux·服务器·算法
秋名RG3 小时前
算法的划分
算法
Tisfy4 小时前
LeetCode 3619.总价值可以被 K 整除的岛屿数目:广度优先搜索BFS
算法·leetcode·bfs·宽度优先
地平线开发者4 小时前
【大模型】EAGLE 与 EAGLE-3:用“特征预测“加速投机解码
算法