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

news2024/11/23 0:03:57

目录

动态规划怎么学?

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.coloradmin.cn/o/749826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骨传导耳机好不好,盘点五款当下最流行的骨传导耳机

其实早在几年前&#xff0c;骨传导耳机就已经出现在大众视野了&#xff0c;由于使用的人数不多&#xff0c;所以一直不温不火的&#xff0c;最近这几年&#xff0c;骨传导耳机的热度才开始兴起&#xff0c;其最大的特点就是&#xff0c;不用入耳佩戴&#xff0c;不用担心运动过…

HOT60-单词搜索

leetcode原题链接&#xff1a;单词搜索 题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#…

分体式骨传导,为敏感耳朵打造的舒适体验,南卡OE上手

骨传导蓝牙耳机这两年很受运动玩家的欢迎&#xff0c;不过标准的骨传导耳机用起来并不算方便&#xff0c;最近我看到南卡新推出一种分体式骨传导耳机&#xff0c;叫南卡OE&#xff0c;和普通的骨传导耳机有很大不同。上周我也入手了一款&#xff0c;这几天试了试&#xff0c;感…

基于YOLOv8开发构建目标检测模型超详细教程【以焊缝质量检测数据场景为例】

超详细教程系列在我前面的文章中也有不少的实践记录&#xff0c;感兴趣的话可以自行阅读即可&#xff1a; 《基于yolov7开发实践实例分割模型超详细教程》 《YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程》 《基于yolov5-v7.0开发实践实例分割模型超详细…

实现java参数非必传

1、路径参数&#xff1a; PathVariable(required false)实现参数aaa非必传 2、非路径参数&#xff1a; RequestParam(required false) 实现参数aaa非必传 3、实体参数&#xff1a; RequestBody(required false&#xff09;实现实体aaa非必传

Java基础---集合类

目录 典型回答 Collection和Collections有什么区别 Java中的Collection如何遍历迭代 Iterable和Iterator如何使用 为什么不把Iterable和Iterator合成一个使用 哪些集合类是线程安全的 典型回答 什么是集合 集合就是一个放数据的容器&#xff0c;准确的说是放数据对象引用…

32位ARM M0+内核单片机 XL32F001简单介绍,Flash 24K,SRAM 3K

XL32F001 系列微控制器采用高性能的 32 位 ARM Cortex-M0内核&#xff0c;宽电压工作范围的 MCU。嵌入 24Kbytes Flash 和 3Kbytes SRAM 存储器&#xff0c;最高工作频率 24MHz。包含多种不同封装类型多款产品。芯片集成 I2C、SPI、USART 等通讯外设&#xff0c;1 路 12bit ADC…

十六、flex应用练习做淘宝按钮界面

目录&#xff1a; 目标小技巧实现最终代码 一、目标&#xff1a;我们要做一个手机版本的淘宝网&#xff0c;蓝色框住的按钮这部分。 二、 小技巧&#xff1a;如何在网页上看手机版本的页面 首先在网页上打开淘宝网&#xff0c;然后按F12&#xff0c;进入调试状态&#xff1b;&…

信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(一):为什么要关注损耗?

一个具有极快上升沿的信号输入到真实传输线中&#xff0c;在从传输线输出的时候上升时间会很长。例如&#xff0c;一个上升时间为50ps的信号&#xff0c;在经过一段36inch长&#xff0c;50Ohm传输线后&#xff0c;上升时间增加到1ns。上升时间的退化是由于传输线的损耗&#xf…

C#使用跨平台的PdfSharpCore开源库生成PDF文件

一、需求说明 在进行项目开发中,需要将C#程序的一些文本内容导出为PDF文件(能够根据文本自动分行分页),并且要求这个生成PDF文件的程序是可跨平台的;实现类似效果: 二、需求分析 ①将程序的文本内容导出为PDF文件; ②能够将文本内容自动分行分页【且可添加页眉、页脚、…

记录一次nginx日志偶现502报错排查

背景 之前的业务链路 负载均衡–>nginx–>cvm&#xff08;业务后端node&#xff09; 上云后链路 负载均衡–>nginx–>pod&#xff08;业务后端node&#xff09; 上云后nginx日志隔几个小时就出现一波502&#xff0c;查看nginx的日志有两个特征&#xff0c;就是re…

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All 概述 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。 数据查询历来都表示为简单的字符串&#xff0c;没有编译时类型检查或 IntelliSense 支持。 此外&a…

matlab中画有重影的机器人运动过程【给另一个机器人设置透明度】

1、前言如题 2、参考连接如下 How to plot two moving robot in the same figure and change one of them transparency&#xff1f; - MATLAB Answers - MATLAB Central (mathworks.cn)3、代码&#xff1a;【找到figure中对应对象并设置属性】 % Create two instances of a…

【OJ比赛日历】快周末了,不来一场比赛吗? #07.15-07.21 #7场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-07-15&#xff08;周六&#xff09; #3场比赛2023-07-16…

【多线程初阶】Thread类常见方法以及线程的状态

多线程初阶系列目录 持续更新中 1.第一次认识线程 2.Thread类常见方法以及线程的状态 … 文章目录 多线程初阶系列目录前言1. Thread 类及常见方法1.1 常见构造方法1.2 常见属性1.3 重要方法1.3.1 启动一个线程 ---- start()1.3.2 中断一个线程 ---- interrupt()1.3.3 等待一…

有PMP有没有必要换cspm?未来的发展前景如何?

最近 CSPM 证书很热门&#xff0c;CSPM 相关问题大家都很关心&#xff0c;今天本橘座就给大家全面解答一下 CSPM到底是何方神圣&#xff1f; 文章主要是解答下面几个常见问题&#xff0c;其他问题可以留言或者私信咨询我哦~ 一、什么是 CSPM证书&#xff1f;跟PMP是什么关系&a…

启动、关闭nacos

下载 进入官网 http://nacos.io/zh-cn/ 页面打开后&#xff0c;点击【前往Github】 进入Github页面&#xff0c;往下拖动&#xff0c;找到 latest stable release 选择当时最新的版本下载即可&#xff0c;这里选择.zip的文件下载 安装 Nacos 是免安装的&#xff0c;我们下…

备战秋招008(20230713)

文章目录 前言一、今天学习了什么&#xff1f;二、关于问题的答案1.集合2.JUC02、底层原理03、内存泄漏 总结 前言 提示&#xff1a;这里为每天自己的学习内容心情总结&#xff1b; Learn By Doing&#xff0c;Now or Never&#xff0c;Writing is organized thinking. 目前…

python - leetcode - 64. 最小路径和【经典题解 - 矩阵数组动态规划】

一. 题目&#xff1a;64. 最小路径和 描述&#xff1a; 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例 1&#xff1a; 输入&#…

【SpringBoot3】--02.Web开发

文章目录 SpringBoot3-Web开发0.WebMvcAutoConfiguration原理1.生效条件2.效果3.WebMvcConfigurer接口4. 静态资源规则源码5. EnableWebMvcConfiguration 源码6. 为什么容器中放一个WebMvcConfigurer就能配置底层行为7. WebMvcConfigurationSupport 1.Web场景1.1自动配置1.2默认…