一、假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

题目不难,这里我主要想写一下递归思想

递归篇
要想用递归,必须满足三个条件:

一个问题的解可以分为几个子问题的解;
这个问题和分解后的子问题,除了数据规模不同,求解思路完全一样;
存在递归终止条件。
再来看看上面的爬楼梯问题:想求n阶楼梯的不同爬法。假设你已经知道了1至(n-1)阶楼梯的解。
来分解子问题吖:
①第一步走了一个台阶——剩下n-1个台阶的爬法,你已经知道为f(n-1);
②第一步走了两个台阶——剩下n-2个台阶的爬法,你已经知道为f(n-2)。
子问题也就这两种情况叭~,递归关系这不就出来了嘛:f(n)=f(n-1)+f(n-2)

附:这个观念是很重要的,一定要想到f(n)=f(n-1)+f(n-2)。f则为走楼梯的方法。

public int climbStairs(int n) {
        if(n==1)
            return 1;
        if(n==2)
            return 2;

int[] tmp = new int[n+1];
        tmp[1] = 1;
        tmp[2] = 2;
        for(int i=3;i<=n;i++){
            //n阶楼梯爬法拆解:第一步走了1阶+f(n-1)   第一步走了2阶+f(n-2)
            tmp[i] = tmp[i-1]+tmp[i-2];
        }
        return tmp[n];
    }

二、小瓜想走上一个一共有n级的台阶,由于小瓜的腿长比较特殊,他一次只能向上走1级或者3级或者5级台阶。小瓜想知道他有多少种方法走上这n级台阶,你能帮帮他吗?

收起

输入
一行一个整数n(n<=100000),表示一共有n级台阶。
输出
一行一个整数,表示小瓜上台阶的方案数*对100003取余*的结果。
输入样例
3
输出样例
2

#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const int mod = 100003;
int dp[N];
int main()
{
  dp[0] = 1, dp[1] = 1, dp[2] = 1;
  int n;
  scanf("%d", &n);
  for(int i = 3; i <= n; ++i)
  {
    if(n >= 5)
      dp[i] =( dp[i - 1] + dp[i - 3] + dp[i - 5]) % mod;
    else if(n >= 3)
      dp[i] =( dp[i - 1] + dp[i - 3]) % mod;
  }
  printf("%d\n", dp[n]);
  return 0;
}
 对于这个题则f(n)=f(n-1)+f(n-3)+f(n-5);

三、说一下两者的不同吧:第二个问题由于要考虑3、4、5台阶的问题,根据f(n)=f(n-1)+f(n-1)的思想,所以要定义dp[0]=1;

动态规划 - 走楼梯相关推荐

  1. 动态规划走楼梯_动态规划问题为什么要画表格?

    ❝ 本文是我的 91 算法第一期的部分讲义内容.91 算法第一期已经接近尾声,二期的具体时间关注我的公众号即可,一旦开放,会第一时间在公众号<力扣加加>通知大家. ❞ 动态规划可以理解为是 ...

  2. 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”

    新京报快讯(记者 张璐)2020年服贸会开幕在即,奥园玲珑塔下,一个高大的机器人"指出了"机器人专题展的具体位置.记者提前探营看到,专题展多足机器人场地设置了草地.台阶.拱桥.斜坡 ...

  3. 动态规划------走楼梯问题

    假设有10阶楼梯,每次可以跨1阶或者2阶,请问走完10阶楼梯总共有多少种走法? 设定一个名为walk(num)的函数,其返回值为走n阶楼梯的走法,则问题为walk(10) 设想一下,我们走到最后一步的 ...

  4. 【动态规划】走楼梯问题

    走楼梯问题 问题:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.一共有多少种走法.(和铺瓷砖问题是一样的) 暴力枚举很简单,先选择可能性,再根据排列组合公式,记录. 但是 ...

  5. 动态规划爬楼梯(为什么到i级的方法=i-1级的方法+到i-2级的方法)

    动态规划爬楼梯(为什么到i级的方法=到i-1级的方法+到i-2级的方法) 先附个原题        初学动态规划,"爬楼梯"是必不可少的,但是相信有好多人都不理解问什么可以直接把变 ...

  6. 关于有些人走楼梯喜欢走两阶的走法求法

    public class 走楼梯 { // 问,上楼梯一次可以走一阶台阶或者两阶台阶,求共有几种走法 //同 小青蛙跳荷叶,一次可以跳一个荷叶的距离,也可以跳两个荷叶的距离,求共有几种跳发等类似问题 ...

  7. 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)

    题目:走楼梯 小明在走楼梯,楼梯有n阶台阶,一次可以上1阶,2阶或者3阶,实现一个方法,计算小明有多少种走楼梯的方式 package louti; import java.util.Scanner;p ...

  8. 递归算法----走楼梯问题(跳台阶)

    /*** 案例2 分治算法 走楼梯* 一个台阶总共有n级,如果一次可以走1级,也可以一次走2级,求总共有多少种走法.* 分析:* 如果只有1级台阶,则只有一种走法,如果有2级台阶,则有2种走法:一次走 ...

  9. CSDN周赛29题解-订班服、争抢糖豆、走楼梯、打家劫舍

    文章目录 给CSDN竞赛的建议 CSDN周赛29题解 订班服 抓糖豆 走楼梯 打家劫舍 给CSDN竞赛的建议 1.希望多出一些原创题目.本次四道题目基本都是非原创题目,增加了作弊的可能性 2.可以模仿 ...

  10. 走楼梯问题PHP,算法之走楼梯问题

    A 上楼梯时,B 从同一楼梯往下走.每次不一定只走 1 级,最多可以一次跳过 3 级(即直接前进 4 级). 但无论走多少级,1 次移动所需时间不变.两人同时开始走,求共有多少种"两人最终同 ...

最新文章

  1. 请汇编高手注释的CompareText
  2. Discuz X2论坛数据库MyISAM转InnoDB的脚本
  3. Python IDLE启动报错
  4. torch.roll() 详解
  5. css 图片换行_这个开源库教你写高级的CSS
  6. 云上快报 | 阿里云混合云再攀新高
  7. Apollo进阶课程㉙丨Apollo控制技术详解——控制器的类型
  8. 改进粒子群优化算法(PURPSO)的MATLAB源程序
  9. Top 10 Digital Transformation Trends For 2020
  10. 电脑证书错误即上网站打不开提示证书错误
  11. 二十四节气-秋分 | 文案、海报
  12. html未响应是什么原因,ie浏览器未响应如何解决
  13. 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
  14. office文档在线预览工具平台选型
  15. java新手入门学习指南
  16. 思科服务器怎么看型号,通过型号快速识别思科路由器,交换机,服务器等设备
  17. [转]辨别常见与不常见音乐文件格式的质量好坏!
  18. 博弈论·公平组合游戏 学习笔记
  19. 当CollapsingToolbarLayout与ToolBar如何设置Title居中
  20. 在线程中调用OpenFileDialog/SaveFileDialog报错处理方法

热门文章

  1. 木子-后端-在没有视图层的情况下,怎样将前台数据直接发给逻辑层
  2. 最全HTTP协议详解
  3. 前端追梦人CSS教程
  4. 运营商精准大数据外呼系统
  5. 访问控制(相关概述)
  6. LayUI中的基本元素之进度条
  7. ASP.NET Core 数据保护(Data Protection)【上】
  8. 流失用户召回方法策略,教你如何挽回流失用户
  9. 2019 ICPC 徐州 H题 Yuuki and a problem
  10. C/C++项目:谁都爱玩的4399小游戏黄金矿工教程