算法题每日一练---第34天: 青蛙跳台阶

简介: 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n (0 <= n <= 100)级的台阶总共有多少种跳法。

3.png

一、问题描述


一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n (0 <= n <= 100)级的台阶总共有多少种跳法。

答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。



二、题目要求

样例

输入:2  输出:2
输入:7  输出:21
输入:0  输出:1


考察

动态规划入门
建议用时5~15min


三、问题分析


我之前很少刷一些动态规划的题目,这一题算是个入门吧,所以我对动态规划尽量讲得详细一点。后面也会陆续出一些动态规划的题目。6.png做动态规划需要几步,就像冰箱装大象一样,分成三步:


第一步:含义搞懂

通常动态规划都会用数组dp[]存放东西,那存放在数组里面的究竟是什么?

这要看题目问我们什么,这一题就问青蛙跳台阶的方案数嘛,那么dp[i]就代表第i个台阶有dp[i]个方案,它问什么我们就存什么。


第二步:变量初始

dp[0]=1             题目样例给了
dp[1]=1             1个台阶跨一步就到
dp[2]=2             2个台阶可以跨1个台阶再跨1个,也可以一次性跨2个,所以两种方案
dp[3]=3             3个台阶每次跨1个、先跨1个再跨2个、先跨2个再跨1个     
......

初始变量一般找2~5个就行,下面才是重头戏啊!


第三步:关系归纳

搞清楚数组的含义和初始值之后,我们求的是第n个台阶方案数,题目又没给,怎么办?

找规律,做归纳总结,看看和前面的台阶方案有什么关系,这一步很重要,规律找不好直接芭比q。

7.png仔细看一下第二步的规律,后一个是不是等于前面两个相加,所以第n个公式为:

dp[n]=dp[n-1]+dp[n-2]。

三步走,打完收工!


四、编码实现


#include<iostream>usingnamespacestd;
intnumWays(intn)
{
if(n<=1) return1;
intdp[n+1],i;
dp[0]=1,dp[1]=1;//初始化变量for(i=2;i<=n;i++)
    {
//规律dp[i]=(dp[i-1]+dp[i-2])%1000000007;//取模别忘了    }
returndp[n];//返回结果}
intmain()
{
intk;
cin>>k;//输入台阶数目cout<<numWays(k);//赋值给动态规划功能的函数return0;
}


五、测试结果


8.png

六、总结与提高


如果题目改成:


一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶......一直到n级台阶。求该青蛙跳上一个 n (0 <= n <= 100)级的台阶总共有多少种跳法,做完之后可以在评论区交流结果。


相关文章
|
5月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
198 0
|
算法
斐波那契数列两种算法和青蛙跳台阶的两种实际问题
当我们看到这样的题时,心想就是一个简单的递归调用么。 但是,我们要看到这种算法的不足之处——效率低下。 首先简单的介绍一下 :
125 0
|
算法 JavaScript
js 实现 贪心算法和动态规划 贪心找零问题, 动态规划 青蛙跳台阶问题
js 实现 贪心算法和动态规划 贪心找零问题, 动态规划 青蛙跳台阶问题
|
算法
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
98 0
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
|
算法
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
190 0
每日算法刷题Day12-跳台阶、排列、替换空格、求n累加
|
算法 关系型数据库 MySQL
ARTS-1-算法练习-跳台阶
ARTS-1-算法练习-跳台阶
88 0
|
6天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
|
1天前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
5天前
|
资源调度 算法 数据可视化
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。

热门文章

最新文章