[蓝桥杯算法从小白到大牛]动态规划第二讲:三步问题

目录

1->题目链接

2->题目解析

3->讲解算法原理

         核心流程:

3.1->状态表示

3.2->状态转移方程(最重要的一步)

3.3->初始化

3.4->填表顺序

3.5->返回值

4->编写代码实现

5->您的专属鼓励师


1->题目链接

三步问题

2->题目解析

        题目意思就是一次选择可以走1 或 2 或 3个台阶,现在一共有n个台阶,问我们到达第

个台阶共有多少种走法,看下我画的图你就很容易理解了.

3->讲解算法原理

核心流程:

        创建一个dp表,按照题目要求去填表,最后根据题目要求返回经过处理的值

3.1->状态表示

        状态表示的含义(你就直接背下来):dp[i]也就是dp表里边的值表示什么意思,状态表示就是什么

        根据题目意思我们画出如下dp表,dp[i]的值表示当有i个台阶时,共有多少种方法,那我们只需要把dp表填写完成返回即可!

3.2->状态转移方程(最重要的一步)

        状态转移方程的含义(直接背下来):就是dp[i] = 什么

        我们画图分析,以i位置状态最近的一步进行分情况讨论:

dp[i] 表⽰⼩孩上第 i 阶楼梯的所有⽅式,那么它应该等于所有上⼀步的⽅式之和:

i. 上⼀步上⼀级台阶, dp[i] += dp[i - 1] ;

ii. 上⼀步上两级台阶, dp[i] += dp[i - 2] ;

iii. 上⼀步上三级台阶, dp[i] += dp[i - 3] ;

综上所述, dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]

需要注意的是,这道题⽬说,由于结果可能很⼤,需要对结果取模

在计算的时候,三个值全部加起来再取模,即(dp[i - 1] + dp[i - 2] + dp[i - 3])%MOD是不可取的,同学们试验一下,n取题目范围最大值时网站报错        signed integer overflow

对于这类需要取模的问题,我们每计算⼀次(两个数相加/乘等),都需要取⼀次模。否则,万⼀发⽣了溢出,我们的答案就错了

3.3->初始化

        通过上边递推公式我们可以看到要求dp[i]的值就需要前三个值,我们初始化的目的就是防止越界,可以看出 dp[i],在i = 0, i = 1, i = 2 的时候是没办法进行推导的,因为dp[-1],dp[-2],dp[-3]越界不是有效数据

        所以我们要在填dp表之前把 i = 1, i= 2, i =3位置初始化

        根据题意dp[1] = 1,dp[2] = 2, dp[3] = 4 ;

3.4->填表顺序

        根据递推公式 dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3] 毫无疑问从左到右

3.5->返回值

        要求有n个台阶有多少方法,对应dp表dp[i]的值,返回dp[i]

4->编写代码实现

class Solution {
public:const int MOD = 1e9 + 7;//防止溢出int waysToStep(int n) {//创建dp表//初始化dp表//填表//返回//特殊处理if(n == 1) return 1;if(n == 2) return 2;if(n == 3) return 4;vector<int> dp(n+1,0);dp[1] = 1;dp[2] = 2;dp[3] = 4;for(int i = 4;i <= n;++i){dp[i] = ((dp[i - 1] + dp[i - 2])%MOD + dp[i - 3])%MOD;}return dp[n];}
};

 

5->您的专属鼓励师

        有些事情,你永远都没有办法做到“顶尖”,因为智力跟不上.但是所有的事情,你都可以做到“高段”,因为它需要的是时间的累积和精力的打磨.不聪明与聪明之间的区别,是很微妙的.有时候我们只会通过一次两次的结果,来判断整个人、整件事,其实这是不明智的.从小,邻居和亲戚在谈论我的时候,都会觉得我很聪明。但是只有我自己知道,我从来没有聪明过,只是看上去比较聪明而已.

        修行之路确实枯燥,但是我们把问题搞懂以后就发现他是那样的美妙!一遍学不会没关系吖,多看几遍,我也是学了好多遍呢,小伙伴们肯定学的又快又好!!!最后希望写的内容对小伙伴们有所帮助,我写的如果有哪里不对的地方请在评论区或者私信指出来哦!让我们一起进步吖,任何疑问包括心情不好都可以找我聊聊,我很乐意当你的倾听者吖.  

  

                            

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

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

相关文章

C#与C++交互开发系列(二十):跨进程通信之共享内存(Shared Memory)

1、前言 共享内存&#xff08;Shared Memory&#xff09;是一种高效的跨进程通信方式&#xff0c;尤其适用于同一台计算机上的进程之间的高速数据传输。与套接字相比&#xff0c;共享内存允许多个进程直接访问同一块内存区域&#xff0c;减少了数据传输的中间步骤&#xff0c;…

智慧公厕解决方案是未来厕所新建和改造的方向

在当今科技飞速发展的时代&#xff0c;智慧公厕解决方案正逐渐成为厕所新建和改造的主流方向&#xff0c;为人们带来更便捷、卫生、高效的使用体验。 一、智能化体验提升便捷性 智慧公厕配备了一系列智能设施&#xff0c;极大地提升了使用的便捷性。比如&#xff0c;智能环保取…

C++ | Leetcode C++题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {int m matrix.size(), n matrix[0].size();// 初始化动态规划的数组&#xff0c;所有的距离值都设置为一个很大的…

Vue3中实现原生CSS完成圆形按钮点击粒子效果和定点旋转动画

效果&#xff1a; 源码&#xff1a; <script setup> import { ElMessage } from "element-plus"; const isClick () > {ElMessage.success(Clicked); }; </script><template><button click"isClick" class"button">…

DGL之copy_e和copy_u

消息函数copy_e和copy_u用法 copy_e语法格式例子 copy_u语法格式例子 copy_e 语法格式 dgl.function.copy_e(e, out)参数&#xff1a; e (str)&#xff1a;边的特征字段&#xff0c;指定用于计算消息的边特征。out (str)&#xff1a;输出的消息字段&#xff0c;指定存储消息…

python画图|hist()函数深层体验

【1】引言 前述学习已经掌握hist()函数的基本运用技巧&#xff0c;可通过下述链接直达&#xff1a; python画图|hist()函数画直方图初探-CSDN博客 python画图|hist()函数画直方图进阶-CSDN博客 我们已经理解hist()函数本质上画的是概率分布图&#xff0c;相关知识属于数理统…

黄山谷捷:以创新为翼,领航新能源汽车散热基板行业

在竞争激烈的市场环境中&#xff0c;创新被视为企业发展的灵魂和生命线&#xff0c;是推动持续成长、保持竞争力的关键要素。作为专注于功率半导体模块散热基板研发、生产和销售的高新技术企业&#xff0c;黄山谷捷股份有限公司具有优秀的创新文化和基因&#xff0c;为公司的高…

如何提升论文写作能力?

很多同学刚开始都不知道如何写作学术论文&#xff0c;这个也很正常&#xff0c;否则要导师来做什么。而且写作是需要练习的,等你写了5篇以上的论文&#xff0c;你就有感觉了。其次&#xff0c;你们感觉论文写作不知道从何下手还有个重要原因是缺少指导&#xff0c;最近接触了几…

梧桐数据库中的条件表达式灵活的数据选择与操作分享

在数据库操作中&#xff0c;条件表达式是处理数据选择和操作的强大工具。它们允许我们在单个查询中根据条件动态地返回不同的值。梧桐数据库支持多种条件表达式&#xff0c;包括CASE、COALESCE、NULLIF等&#xff0c;这些表达式在数据查询和处理中扮演着重要角色。本文将详细介…

配置管理,雪崩问题分析,sentinel的使用

目录 配置管理一&#xff1a;什么是配置管理二&#xff1a;配置共享三&#xff1a;配置热更新 雪崩问题一&#xff1a;原因分析二&#xff1a;解决方案 Sentinel一&#xff1a;快速入门二&#xff1a;请求限流三&#xff1a;线程隔离四&#xff1a;fallback五&#xff1a;服务熔…

算法练习:904. 水果成篮

题目链接&#xff1a;904. 水果成篮。 题目意思就是可以选取两个种类的水果不能超过两个种类&#xff0c;该种类个数没有限制&#xff0c; 但是一旦超过两个种类的水果就要停止计数。 示例中数组编号就是就是种类&#xff0c;就是不能出现三个不同编号的数。 1.暴力解法&…

邮件营销模板定制服务:满足个性营销需求!

邮件营销模板创建步骤&#xff1f;外贸营销邮件范文模板有哪些&#xff1f; 为了在众多邮件中脱颖而出&#xff0c;企业需要定制化的邮件营销模板&#xff0c;以更好地传达品牌信息&#xff0c;提升客户参与度。MailBing将探讨邮件营销模板定制服务的重要性&#xff0c;并介绍…

cuda 环境搭建

官网安装教程 https://docs.nvidia.com/deeplearning/cudnn/latest/installation/windows.html 1. 下载安装驱动&#xff0c; 安装完成之后输入 nvidia-smi 查看结果 https://www.nvidia.cn/drivers/lookup/ 2. 安装工具链 安装完成之后输入 nvcc -v 查看结果 http…

unity 镜面 反射

URP 镜面 资源绑定 下载 namespace UnityEngine.Rendering.Universal { [ExecuteInEditMode]public class PlanarURP : MonoBehaviour{public bool VR false;public int ReflectionTexResolution 512;public float Offset 0.0f;[Range(0, 1)]public float Reflecti…

细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程目的 1、目标 2、通讯协议及应对错误指令的处理目标 二、工程设置 三、程序改进 四、下载与调试 1、合规的指令 2、不以#开头&#xff0c;但以&#xff1b;结束&#xff0c;长度不限 3、以#开头&#xff0c;不以;结束&#xff0c;也不包含;&#xff0c;长…

leetcode 2043.简易银行系统

1.题目要求: 示例: 输入&#xff1a; ["Bank", "withdraw", "transfer", "deposit", "transfer", "withdraw"] [[[10, 100, 20, 50, 30]], [3, 10], [5, 1, 20], [5, 20], [3, 4, 15], [10, 50]] 输出&#xff…

JVM 复习1

内容 JVM 类加载器 JVM 运行时数据区 测试1 JVM整体架构考察。整体架构分为哪三层。分别是什么&#xff1f;通过绘制架构图来作答。 前端编译器是什么&#xff0c;作用是什么。要进行那些步骤&#xff1f; 类加载构成几个步骤。并且详细作答每个步骤的工作。 准备阶段和初…

Android——网络请求

get 请求 public static String doGeg() {String result "";BufferedReader reader;try {// 1.建立连接HttpURLConnection httpURLConnection null;String url "https://www.baidu.com";URL requestUrl new URL(url);httpURLConnection (HttpURLConn…

软件技术求职简历「优选篇」

【#软件技术简历#】一份精心撰写的简历是增加获得心仪职位的机会。那么&#xff0c;如何才能写出一份既全面又吸引人的软件技术简历呢&#xff1f;以下是幻主简历整理的软件技术简历「优选篇」&#xff0c;欢迎大家阅读收藏&#xff01; 软件技术简历范文&#xff1a; 求职意向…

GESP4级考试语法知识(算法概论(三))

爱因斯坦的阶梯代码&#xff1a; //算法1-12 #include<iostream> using namespace std; int main() {int n1; //n为所设的阶梯数while(!((n%21)&&(n%32)&&(n%54)&&(n%65)&&(n%70)))n; //判别是否满足一组同余式cout<<n<…