算法---动态规划练习-1(三步问题)

三步问题

  • [1. 题目解析](#1. 题目解析)
  • [2. 讲解算法原理](#2. 讲解算法原理)
  • [3. 编写代码](#3. 编写代码)

1. 题目解析

题目地址三步问题

2. 讲解算法原理


1. 定义一个常量MOD为10^9+7,用于取模运算。

2. 创建一个长度为n+3的数组dp,用于存储计算过程中的中间结果。数组的下标表示台阶的级数,数组元素存储对应级数时的上楼方式数。

3. 初始化数组的前三个元素dp[1]、dp[2]和dp[3]分别为1、2、4,这是台阶数为1、2、3时的上楼方式数。

4. 如果n小于等于3,直接返回dp[n],即台阶数为n时的上楼方式数。

5. 从i=4开始,通过循环填充数组dp的剩余元素。对于每个i,计算台阶数为i时的上楼方式数。根据题意,可以从前一级台阶跨一步上来、从前两级台阶跨两步上来,或者从前三级台阶跨三步上来。因此,dp[i] = (dp[i-3] + dp[i-2] + dp[i-1]) % MOD,其中% MOD是为了防止整数溢出。

6. 循环结束后,数组dp中的所有台阶数对应的上楼方式数都已计算得到

7. 返回dp[n],即n级台阶的上楼方式数。


3. 编写代码

cpp 复制代码
class Solution {
public:

    int waysToStep(int n) {
        
        const int MOD=1e9+7;
        vector<long long> dp(n+3);
        dp[1]=1,dp[2]=2,dp[3]=4;

        if(n<=3) return dp[n];
        for(int i=4;i<=n;i++)
        {
            dp[i]=(dp[i-3]+dp[i-2]+dp[i-1])%MOD;
        }
        return dp[n];
    }
};
相关推荐
艾莉丝努力练剑2 分钟前
【C++:继承和多态】多态加餐:面试常考——多态的常见问题11问
开发语言·c++·人工智能·面试·继承·c++进阶
Skrrapper3 分钟前
【C++】C++11出来之后,到目前为止官方都做了些什么更新?
开发语言·c++
西哥写代码20 分钟前
基于dcmtk的dicom工具 第十一章 加载dicom文件多帧图数据
c++·dicom·dcmtk·vs2017·多帧图
麦麦大数据20 分钟前
F039 python五种算法美食推荐可视化大数据系统vue+flask前后端分离架构
python·算法·vue·推荐算法·美食·五种算法
sulikey24 分钟前
Qt 入门简洁笔记:常用控件
c++·qt·控件·qwidget·qlabel·qpushbutton·qlineedit
一抹轻笑动人33 分钟前
cpp language 语法
开发语言·c++
星空露珠34 分钟前
数独解题算法lua脚本
开发语言·数据结构·算法·游戏·lua
小猪咪piggy37 分钟前
【算法】day14 链表
数据结构·算法·链表
EnCi Zheng37 分钟前
LeetCode_1_两数之和完全解析-从暴力枚举到哈希表优化的算法进阶之路
算法
煤球王子41 分钟前
学而时习之:C++语言基础了解
c++