【学会动态规划】三步问题(2)

目录

动态规划怎么学?

1. 题目解析

2. 算法原理

1. 状态表示

2. 状态转移方程

3. 初始化

4. 填表顺序

5. 返回值

3. 代码编写

写在最后:


动态规划怎么学?

学习一个算法没有捷径,更何况是学习动态规划,

跟我一起刷动态规划算法题,一起学会动态规划!

1. 题目解析

根据题目,我们可以模拟一下走楼梯的过程,

比如说这里有四级台阶:

小孩走到一级台阶有一种走法,就是直接走上去:

小孩走到二级台阶有两种走法,一种是直接走上去,

一种是以一级台阶作为起点,一步走上去:

 小孩走到三级台阶有四种走法:

从平地直接走上去,这是一种走法;

以一级台阶为起点,而走到一级台阶有一种方法,所以从一级台阶直接走上去是一种走法;

以二级台阶为起点,而到二级台阶有两种方法,所以以二级台阶为起点是两种方法;

1 + 1 + 2 = 4 种方法:

 小孩走到四级台阶有七种走法:

以一级台阶为起点,是一种方法;

以二级台阶为起点,有两种方法;

以三级台阶为起点,有四种方法:

1 + 2 + 4 = 7 种方法:

现在是不是发现规律了,

实际上就是前面三个数相加。 

2. 算法原理

1. 状态表示

根据我们之前学的,状态表示就是指:dp[ i ] 表示的是什么?

而 dp[ i ] 表示的是:到达 i 位置时,一共有多少种走法。

2. 状态转移方程

那么 dp[ i ] 等于什么呢?

根据前面找到规律,我们不难得出:

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

3. 初始化

初识化就靠我们自己刚刚算的:

dp[ 1 ] = 1,dp[ 2 ] = 2,dp[ 3 ] = 4。

4. 填表顺序

一步步上台阶,就是从左往右填。

5. 返回值

返回的就是 dp[ n ] 位置的值

3. 代码编写

代码编写其实就是按照我们之前的分析,

用固定的套路编写就行:

class Solution {
public:int waysToStep(int n) {// dp 题目的固定写代码套路// 1. 创建dp表// 2. 初始化// 3. 填表// 4. 返回值const int MOD = 1e9 + 7;//考虑边界问题if(n == 1 || n == 2) return n;if(n == 3) return 4;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];}
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/20715.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库应用:MySQL索引

目录 一、理论 1.MySQL三层逻辑架构 2.索引结构 3.MyISAM与InnoDB对比 4.sql优化 5.MySQL 索引 6.MySQL索引原理 二、实验 1.创建索引 三、总结 一、理论 1.MySQL三层逻辑架构 MySQL的存储引擎架构将查询处理与数据的存储/提取相分离。 MySQL的逻辑架构图如下&…

PostgreSQL技术内幕(九)libpq通信协议

libpq通信协议是基于TCP/IP 协议的一套消息通信协议&#xff0c;它允许 psql、JDBC、PgAdmin等客户端程序传递查询给PostgreSQL后端服务器&#xff0c;并接收返回查询的结果。 在这次的直播中&#xff0c;我们为大家介绍了libpq通信协议的实现原理和执行机制&#xff0c;以下内…

springboot项目实战-API接口限流

1.简介 对接口限流的目的是通过对并发访问/请求进行限速&#xff0c;或者对一个时间窗口内的请求进行限速来保护系统&#xff0c;一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。 1.1.为什么需要限流? 大量正常用户高频访问导致服务器宕机恶意用户高频访问导致服…

stm32(时钟和中断事件知识点)

一、复位和时钟控制&#xff08;RCC&#xff09; 复位 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWDG复位) 3. 独立看门狗计数终止(IWDG复位) 4. 软件复位(SW复位) 5. 低功耗管…

MJ魔法AI逼真绘画

最近在玩MJ绘画&#xff0c;将一些经验分享给大家。 经验1&#xff1a;主体尽量放在前面 作图通用指令&#xff1a;主体描述词场景风格清晰度比例V5。MJ的逻辑是优先绘制前面的词&#xff0c;如果你的场景里面包含多个人或物。一定要把你希望在画面中出现的主体放在前面&#…

8-1-1、kuberbetes学习-service、deployment、ReplicaSet、pod

Kubernetes资源对象Pod、ReplicaSet、Deployment、Service之间的关系_CodingSoldier的博客-CSDN博客 Pod、ReplicaSet、Deployment、Service之间的关系如下图: deployment根据pod的标签关联到pod,是为了管理pod的生命…

个人微信开发API,微信机器人。

微信个人号二次开发&#xff0c;基于API开发可以有很多功能模块 各种知名SCRM系统、客服平台都是根据此API二次开发的。 在这里插入图片描述 好友管理&#xff1a; 添加好友、 删除好友、 修改备注、 创建标签、 获取好友列表、 检测僵尸粉 设置个人头像 同意添加好友 获取好…

基本概念【变量和数据类型和运算符、二进制和十进制、十进制转二进制 、二进制转十进制 】(一)-全面详解(学习总结---从入门到深化)

目录 变量和数据类型和运算符 二进制和十进制的转化 十进制转二进制 二进制转十进制 注释 标识符和关键字 关键字/保留字 变量(variable) 变量的分类和作用域 常量(Constant) 基本数据类型(primitive data type) 整型 浮点型(Floating Point Number) 字符型 …

我的2023年上半年总结

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰来分享一下这半年吧&#xff01;&#xff01;&#xff01; 一、目标达成情况总结&#xff1a; 这半年算是比较充实吧。 一边学习学校的课程&#xff0c;同时自学C语言和数据结构与算法的知识&#xff0c;并且把所学习…

Kylin麒麟系统设置开机自动登录roo账户

1.安装麒麟系统后&#xff0c;默认root用户是不开启的&#xff0c;首先得设置root用户密码命令。 sudo passwd root 此时会要求输入密码&#xff0c;输入您当前用户登录密码即可。 2.以root权限修改 /usr/share/lightdm/lightdm.conf.d/60-kylin.conf 文件,如提示输入密码&am…

线性回归算法

什么是线性回归&#xff1f; 线性回归&#xff08;Linear regression&#xff09;是一种利用线性函数对自变量&#xff08;特征&#xff09;和因变量之间的关系进行建模的方法。线性回归是机器学习中一种广泛使用的基本回归算法。含有有多个特征的线性回归称为多元线性回归。 …

​ 基于单片机智能温室大棚控制系统

功能介绍 以51单片机作为主控系统&#xff1b; DS18B20温度采集模块检测温度&#xff1b; 光敏电阻和ADC0832组成的光照检测模块&#xff1b; 土壤湿度检测模块检测土壤湿度&#xff1b; CO2检测模块检测CO2浓度&#xff1b; LCD1602显示模块显示测量值、 若温度小于温度最…