动态规划 - 走楼梯
一、假设你正在爬楼梯。需要 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;
动态规划 - 走楼梯相关推荐
- 动态规划走楼梯_动态规划问题为什么要画表格?
❝ 本文是我的 91 算法第一期的部分讲义内容.91 算法第一期已经接近尾声,二期的具体时间关注我的公众号即可,一旦开放,会第一时间在公众号<力扣加加>通知大家. ❞ 动态规划可以理解为是 ...
- 动态规划走楼梯_负重爬楼梯、过草地,服贸会六足机械人展示“送水到家”
新京报快讯(记者 张璐)2020年服贸会开幕在即,奥园玲珑塔下,一个高大的机器人"指出了"机器人专题展的具体位置.记者提前探营看到,专题展多足机器人场地设置了草地.台阶.拱桥.斜坡 ...
- 动态规划------走楼梯问题
假设有10阶楼梯,每次可以跨1阶或者2阶,请问走完10阶楼梯总共有多少种走法? 设定一个名为walk(num)的函数,其返回值为走n阶楼梯的走法,则问题为walk(10) 设想一下,我们走到最后一步的 ...
- 【动态规划】走楼梯问题
走楼梯问题 问题:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶.一共有多少种走法.(和铺瓷砖问题是一样的) 暴力枚举很简单,先选择可能性,再根据排列组合公式,记录. 但是 ...
- 动态规划爬楼梯(为什么到i级的方法=i-1级的方法+到i-2级的方法)
动态规划爬楼梯(为什么到i级的方法=到i-1级的方法+到i-2级的方法) 先附个原题 初学动态规划,"爬楼梯"是必不可少的,但是相信有好多人都不理解问什么可以直接把变 ...
- 关于有些人走楼梯喜欢走两阶的走法求法
public class 走楼梯 { // 问,上楼梯一次可以走一阶台阶或者两阶台阶,求共有几种走法 //同 小青蛙跳荷叶,一次可以跳一个荷叶的距离,也可以跳两个荷叶的距离,求共有几种跳发等类似问题 ...
- 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)
题目:走楼梯 小明在走楼梯,楼梯有n阶台阶,一次可以上1阶,2阶或者3阶,实现一个方法,计算小明有多少种走楼梯的方式 package louti; import java.util.Scanner;p ...
- 递归算法----走楼梯问题(跳台阶)
/*** 案例2 分治算法 走楼梯* 一个台阶总共有n级,如果一次可以走1级,也可以一次走2级,求总共有多少种走法.* 分析:* 如果只有1级台阶,则只有一种走法,如果有2级台阶,则有2种走法:一次走 ...
- CSDN周赛29题解-订班服、争抢糖豆、走楼梯、打家劫舍
文章目录 给CSDN竞赛的建议 CSDN周赛29题解 订班服 抓糖豆 走楼梯 打家劫舍 给CSDN竞赛的建议 1.希望多出一些原创题目.本次四道题目基本都是非原创题目,增加了作弊的可能性 2.可以模仿 ...
- 走楼梯问题PHP,算法之走楼梯问题
A 上楼梯时,B 从同一楼梯往下走.每次不一定只走 1 级,最多可以一次跳过 3 级(即直接前进 4 级). 但无论走多少级,1 次移动所需时间不变.两人同时开始走,求共有多少种"两人最终同 ...
最新文章
- 请汇编高手注释的CompareText
- Discuz X2论坛数据库MyISAM转InnoDB的脚本
- Python IDLE启动报错
- torch.roll() 详解
- css 图片换行_这个开源库教你写高级的CSS
- 云上快报 | 阿里云混合云再攀新高
- Apollo进阶课程㉙丨Apollo控制技术详解——控制器的类型
- 改进粒子群优化算法(PURPSO)的MATLAB源程序
- Top 10 Digital Transformation Trends For 2020
- 电脑证书错误即上网站打不开提示证书错误
- 二十四节气-秋分 | 文案、海报
- html未响应是什么原因,ie浏览器未响应如何解决
- 2014阿里巴巴实习生招聘-研发工程师笔试题/网络编程小结
- office文档在线预览工具平台选型
- java新手入门学习指南
- 思科服务器怎么看型号,通过型号快速识别思科路由器,交换机,服务器等设备
- [转]辨别常见与不常见音乐文件格式的质量好坏!
- 博弈论·公平组合游戏 学习笔记
- 当CollapsingToolbarLayout与ToolBar如何设置Title居中
- 在线程中调用OpenFileDialog/SaveFileDialog报错处理方法