【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题

简介: 【动态规划专栏】专题一:斐波那契数列模型--------2.三步问题


题目来源

本题来源为:

Leetcode面试题 08.01. 三步问题

题目描述

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

题目解析

我们模拟一下小孩上楼梯的过程,会很容易发现规律

算法原理

1.状态表示

经验+题目要求

而经验就是:以i位置为结尾+…

对一维的dp而言,基本上就是两种:以i位置为结尾+…或者以i位置为开始+…

…表示根据题目要求进行补充完整。

对于本题而言:

dp[i] 表示:到达i位置时,一共有多少种方法

2.状态转移方程

在推导时基本上就是:

以i位置的状态,最近的一步,来划分问题

对于本题而言:到达i位置需要分三种情况

因此状态方程为:

dp[i]=dp[i-3]+dp[i-2]+dp[i-1];

3.初始化

根据状态转移方程:本题为防止越界需要处理下标为1,2,3位置的值:

dp[1]=1;
dp[2]=2;
dp[3]=4;

4.填表顺序

根据状态转移方程,我们计算dp[i]位置的值需要i-1与i-2与i-3位置的值,因此我们的填表顺序为:从左往右

5.返回值

根据题目要求直接返回dp[n]

代码实现

class Solution 
{
public:
    int waysToStep(int n) 
    {
         // 1.创建dp表
        // 2.初始化
        // 3.填表
        // 4.返回值
        
        const int MOD=1e9+7;
        //处理边界情况:
        if(n==1)
        return 1;
        if(n==2)
        return 2;
        if(n==3)
        return 4;
        //创建dp表
        vector<int> dp(n+1);
        //初始化
        dp[1]=1;
        dp[2]=2;
        dp[3]=4;
        //填表:
        for(int i=4;i<=n;i++)
        {
            dp[i]=((dp[i-3]+dp[i-2])%MOD+dp[i-1])%MOD;
        }
        return dp[n];
        
    }
};
相关文章
|
安全 Java 数据安全/隐私保护
如何使用Spring Boot进行表单登录身份验证:从基础到实践
如何使用Spring Boot进行表单登录身份验证:从基础到实践
361 5
|
缓存 算法 安全
被追着问UUID和自增ID做主键哪个好,为什么?
讨论了UUID和自增ID作为数据库主键的优缺点。UUID全局唯一,适合分布式系统,但存储空间大,不适合范围查询。自增ID存储空间节省,查询效率高,但分库分表困难,可预测性高。UUID版本包括基于时间戳(V1)、随机数(V4)以及基于名称空间的MD5(V3)和SHA1(V5)散列。
1211 1
被追着问UUID和自增ID做主键哪个好,为什么?
|
域名解析 存储 缓存
Squid代理服务器
Squid代理服务器
927 1
|
自然语言处理 负载均衡 Java
【Apollo】(2)--- Apollo架构设计
【Apollo】(2)--- Apollo架构设计
480 0
|
存储 JSON 自然语言处理
基于Vue2.x的前端架构,我们是这么做的
基于Vue2.x的前端架构,我们是这么做的
463 0
基于Vue2.x的前端架构,我们是这么做的
|
XML 移动开发 Java
八十六、Log4j与Log4j2 你真的明白了吗?
八十六、Log4j与Log4j2 你真的明白了吗?
八十六、Log4j与Log4j2 你真的明白了吗?
|
传感器 数据可视化 数据处理
3个用于时间序列数据整理的Pandas函数
本文将演示 3 个处理时间序列数据最常用的 pandas 操作
229 0
3个用于时间序列数据整理的Pandas函数
|
存储 人工智能 边缘计算
独家首发 | 阿里巴巴新基建洞察系列——《5G智能经济应用场景》研究报告正式发布
大家有没有注意到,5G全球商用其实已经超过1年了,中国也超过半年了,但是大家似乎身边并没有感受到5G带来的变化,甚至连5G手机都看不到几款。5G真的会引爆行业应用和机遇吗?新一轮数字基建驱动下,5G行业应用将往什么方向走?《阿里巴巴新基建洞察之5G智能经济应用场景》带你解锁5G时代应用场景。
10106 0
独家首发 | 阿里巴巴新基建洞察系列——《5G智能经济应用场景》研究报告正式发布
|
Web App开发 JavaScript 前端开发
python如何获取动态页面数据
python如何获取动态页面数据
|
前端开发 JavaScript 容器
swap去中心化博饼交易所系统开发/(成熟源码)
swap去中心化博饼交易所系统开发/(成熟源码)
500 0