上台阶(初级)

有一楼梯共n级,刚开始时你在第0级,若每次只能跨上一级或二级,要走上第n级,共有多少走法?(练习题NYOJ76)

解决思路(一)

这道题呢  有两种思路   如果你经验丰富  一看就看出来是动态规划了 那么就好写了

我们来分析一下动态规划  首先  n=1  只有一种 n=2 有两种  这没有疑问 

那么 我们假设n=10   现在设上到第九层的方法是F(9)  设上到第八层的方法是F(8)

F(9) 种方法和F(8)种方法  两者中一定没有重复的  因为它们的终点都不同

那么对于第九层来说  再走一步 就到达第十层   那么 我们有F(9)种方法到达第九层

每种方法再走一步就到十了   所以我们就有F(9)种到达第十层的方法了  同理

对于第八层来说  我们不能走一级到达9  因为这种情况已经包含在F(9)里面了(仔细想想)

所以只能走两级 到达十  那么就有F(8)种方法到达十了  而F(8) F(9)不重复  所以F(8)+F(9)种方法到达十

而再往前 7 6 5...这些都需要先经过8 9 才能到  所以都已经包含在F(8) F(9)里了

所以  最终结论就是 F(n)=F(n-1)+F(n-2)  (n>2)   F(1)=1 F(2)=2    ------也就是斐波那契数列

解决思路(二)

如果说你不知道上面的怎么分析,那么也不要紧,因为这个问题也不是特别复杂,n=3 n=4的情况我们是完全可以手算出来的,那么观察规律,很容易就发现这是斐波那契数列了,甚至算出n=3的情况就可以大胆的试斐波那契了。但是要注意下,斐波那契数列到三四十左右就爆long long了  。注意范围。

那么,既然找规律这么容易,那我们干嘛还要考虑上面说的动态规划解法呢?

其实呢,上面的动态规划思想很重要,一定要理解,因为题目是活的,我们一定要把原理理解透彻,学会举一反三

才可以更好的应对题目的变式。

上台阶(升级版)

题目

一个台阶总共有n级,如果一次可以跳1级,也可以跳2级......它也可以跳上n级。此时一只青蛙跳上一个n级的台阶总共有多少种跳法?

解决思路

这下情况变得复杂了,你就不能用上边那个找规律的方法了。

根据上边刚才的分析,我们设跳到一级有F(1)种方法,跳到二级有F(2)种方法.....F(3)...F(4).....

F(1) ..F(2).. F(3).. F(4)...F(n)  这些方法是没有重复的  因为终点都不一样

而这次 青蛙一次最多可以跳n阶  所以不论当前处在哪一阶 他都可以一步到达n层

所以  青蛙处于1....2...3...4...n-1 时和第一个问题中处于8、9往10跳的情况是一样的

所以  我们得到式子   F(n)=F(n-1)+F(n-2)+F(n-3).......F(1)

而 F(n-1)=F(n-2)+F(n-3)+F(n-4).......F(1)

两式相减  F(n) - F(n-1)=F(n-1)   --------->即F(n)=2*F(n-1)  F(1)=1

得到式子答案就出来了,实际做题时候要注意范围和题目要求。

上台阶(变式版)

青蛙抓虫

题目描述

一只青蛙,想要捕食距离它M米处的一只昆虫。
已知青蛙的蛙跳范围为[1, N]之间,单位米(每次蛙跳距离为整数,即[1,N]之间的整数)。青蛙在0的位置,求青蛙跳到M的位置吃到昆虫的方案数。

输入

测试实例包括T组测试数据。(T <= 100)
每组测试数据为两个数字M和N,分别代表青蛙距离昆虫的距离以及蛙跳的最远距离。(0 <= M <= 1000, 0 < N <= 100)

输出

对于每组测试数据,输出青蛙吃到昆虫的方案数。数据过大,结果对1e9+7取余。

样例输入

2
5 1
5 2

样例输出

1
8

上面那个升级版的解法,因为每一个位置都可以到达n 所以   F(n)=F(n-1)+F(n-2)+F(n-3).......F(1)

而这个  题意变了  每次最多跳n   但一共长却是m    其实思路还是原来的思路

对于 小于n的位置我们还是原来的求法  对于大于n的位置   等于的是能跳到他的位置的总和

如图

代码

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
ll a[10010];
int main(){int T,m,n;scanf("%d",&T);while(T--){scanf("%d%d",&m,&n);memset(a,0,sizeof(a));a[1]=1;for(int i=2;i<=n;i++)a[i]=(2*a[i-1])%mod;for(int i=n+1;i<=m;i++){ll sum=0;for(int j=i-n;j<i;j++){sum+=a[j];sum%=mod;}a[i]=sum;}printf("%lld\n",a[m]);}return 0;
}

跳台阶问题详解---动态规划相关推荐

  1. 青蛙跳台阶问题详解 递归思想

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 示例1: 输入1 返回值1 示例2: 输入4 返回值5 思想: 经典递 ...

  2. C语言——青蛙跳台阶问题详解(递归)

  3. 走进递归经典——青蛙跳台阶问题详解

    目录 传统艺能

  4. 详解动态规划最长公共子序列--JavaScript实现

    前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...

  5. java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现

    硬币找零问题是动态规划的一个经典问题,其中最少硬币找零是一个变种,本篇将参照上一篇01背包问题的解题思路,来详细讲解一下最少硬币找零问题.如果你需要查看上一篇,可以点击下面链接: 详解动态规划01背包 ...

  6. 详解动态规划01背包问题--JavaScript实现

    对其他动态规划问题感兴趣的,也可以查看 详解动态规划最少硬币找零问题--JavaScript实现 详解动态规划最长公共子序列--JavaScript实现 一开始在接触动态规划的时候,可能会云里雾里,似 ...

  7. vue底部跳转_详解Vue底部导航栏组件

    不多说直接上代码 BottomNav.vue: {{item.name}} export default{ props:['idx'], data(){ return { items:[{ cls:& ...

  8. python跳一跳脚本详解_微信跳一跳游戏 python脚本辅助得高分

    微信小程序一时间火爆朋友圈,关键是还有排行榜!游戏操作简单,可直接根据电脑识别,用python写出自动跳辅助脚本,本想动手写下,索性网上有大神写了现成脚本,修改了一小部分参数,就可以稳定使用了霸榜没有 ...

  9. 详解动态规划算法(Python)

    视频来源:https://www.bilibili.com/video/BV1xb411e7ww?from=search&seid=3112459103674479435 动态规划解题四组成部 ...

  10. 跳台阶问题 + 变态跳台阶问题 解法(动态规划递归 + 非递归)

    一.跳台阶问题 题目描述: 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级.求总共有多少总跳法,并分析算法的时间复杂度. 通过题目的描述,可以很清晰地看到,这就是一个Fibonacci数列. 递 ...

最新文章

  1. Git错误:fatal: Not a git repository (or any of the parent directories)解决方法
  2. 计算机安装了打印驱动无法打印,安装打印机的时候为什么电脑无法正常识别打印机?...
  3. 计算机在外语专业中有哪些应用,CALL(3):计算机在外语教学中的应用
  4. Hadoop中Namenode单点故障的解决方案及详细介绍
  5. 解决VS2010复制代码中文乱码的问题
  6. .NET Core 3.0:System.Data的变化
  7. 旋转卡壳 背诵用模板
  8. 多商户酒店预订小程序PMS管理系统成品源码
  9. Windows 2000 下载
  10. 会考计算机操作题知识点,江西省信息技术会考操作题知识要点汇总
  11. 如何快乐地检测SQL注入
  12. vi编辑器的使用   快捷键
  13. JS下载文件、图片,JS打包下载
  14. java毕业设计多少钱?不如自己尝试做一下
  15. 2013阿里技术嘉年华:基于OpenStack构建网易云主机服务
  16. DDR、DDR2、DDR3、DDR4、LPDDR区别
  17. windows系统redis部署配置(IP/端口/服务)配置
  18. TensorFlow 字符串 与数字 互相转换
  19. 永辉超市业绩下滑背后:新零售遇融合难题?
  20. 编码训练营 vs 大学:哪个将帮助您获得科技行业最有声望的工作?

热门文章

  1. 数据中心运维管理经验39条
  2. SQL Server MYSQL 检查点的好处
  3. PHP函数: set_time_limit
  4. Linux常用命令英文全称
  5. Spring源码解析一(框架梳理)
  6. React Native填坑之旅--Button篇
  7. Linux LVM的PV操作
  8. IQ推理:P先生和Q先生
  9. 0.python class
  10. vsftpd单用户多目录配置