第39级台阶(递归+dp)
题目
思路
- 这题看起来像兔子数列,但题目说第一步先迈左脚,最后一步是右脚,说明,走楼梯的次数为偶数
- 模拟dp过程,观察哪些解不满足
/*1 12 (1,1) (2)3 (1,1,1) (1,2) (2,1)4 (1,1,1,1) (2,2) (1,2,1) (2,1,1) (1,1,2)5 (1,1,2,1) (1,2,1,1) (2,1,1,1) (1,1,1,2) (2,2,1) (2,1,2) (1,2,2) (1,1,1,1,1)*/
- 发现走奇数层台阶满足的次数为原来的二分之一
代码
package 蓝桥杯;public class 走台阶 {public static void main(String[] args) {// dp[i] 表示走到第i阶用的上法int []dp=new int[50];dp[1]=1;dp[2]=2;/*1 12 (1,1) (2)3 (1,1,1) (1,2) (2,1)4 (1,1,1,1) (2,2) (1,2,1) (2,1,1) (1,1,2)5 (1,1,2,1) (1,2,1,1) (2,1,1,1) (1,1,1,2) (2,2,1) (2,1,2) (1,2,2) (1,1,1,1,1)*/for (int i = 3; i <=39; i++) {dp[i]=dp[i-1]+dp[i-2];}System.out.println(dp[39]/2);}
}
(但我们的分析还是不够严谨的,为什么满足的次数为总次数的一半???下面我们将用递归模拟的形式实现)
递归模拟法
package 蓝桥杯;import java.util.Arrays;
import java.util.LinkedList;public class 走台阶递归版 {static int ans=0;public static void main(String[] args) {// 左脚为false,右脚为true//右脚上去相当于左脚下来dfs(39,false);System.out.println(ans);}public static void dfs(int x,boolean istrue){if (x<=0){return;}if ((x==1||x==2)&&istrue==false){ans++;}dfs(x-1,!istrue);dfs(x-2,!istrue);}
}
解读:
- 其实1走到39层,和39走到1层的命题是等价的
- 无论先迈哪个脚,只要第一次迈的脚和最后一次迈的脚不同依然满足题意
- 我们模拟两种状态,每次递归的过程中变换脚( !istrue 表示脚的状态变换)
- 当台阶走到只剩下最后1个或2个台阶时,之后就得走下一步了,走下一步之前脚的状态应该和第一步的状态相同,之后再走一次状态改变才能满足题意(递归终止的条件)
当然答案都是相同的
第39级台阶(递归+dp)相关推荐
- 第39级台阶 递归
题目1:39级台阶 小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我 每一步只能迈上1个或2个台阶. ...
- 第39级台阶(dp)
3.题目标题: 第39级台阶(满分8分) 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈 ...
- 【蓝桥java】递归基础之39级台阶
题目: 小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左 ...
- 蓝桥杯 第39级台阶 递推动态规划
网上答案写的都和狗屎一样.看不下去.自己写一个 描述如下 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题:如果 ...
- 第三届蓝桥杯省赛---第39级台阶
第39级台阶 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚, ...
- 高斯日记、猜年龄、世纪末的星期、排他平方数、马虎的算式、振兴中华、组素数、第39级台阶
高斯日记 题目 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后 ...
- 蓝桥杯真题 13省3-第39级台阶 小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台
问题描述 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后 ...
- 递归算法—第39级台阶
递归算法 基本思想: 递归算法一般用于将较为复杂的规模较大的问题分解成规模较小的同类问题,通过函数或子过程直接或间接调用自身,以小规模问题解决复杂问题,使复杂问题简单化,使程序更加简洁,是解决很多计算 ...
- 第39级台阶问题(递归算法)
题目如下 小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后 ...
- 蓝桥杯:第39级台阶————Python
题目 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左右交 ...
最新文章
- python安装requests库pip不是_python pip安装requests时报错,怎么解决?
- mysql分组后统计
- puppet自动化运维之puppet的资源基础知识
- OpenStack 虚拟机的磁盘文件类型与存储方式
- Matlab读取点云数据显示
- Convert AS400 Spool to PFD Tools – PDFing
- 关于graphviz绘制的点(dot)图在显示时中文乱码问题的解决方法(亲测)
- 假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为10μs,由缓冲区送至用户区的时间是5μs,系统对每个磁盘块数据的处理时间为2μs。若用户需要将大小为10个磁盘块的
- MongoDB常用操作总结
- Java 证书pem转KeyStore、jks文件
- tls jdk_使用JDK 13查看TLS配置
- 网卡 远程唤醒问题故障排除
- django-正向查询与反向查询演练-查询集的三种状态
- 【Linux】在Linux环境下使用VSCode调试C/C++程序
- 解决问题__max 模型白色 材质球换没用
- EBS 常用 SQL
- 两道考研算法设计题- 2010 2013
- ATITIT提升效率 保持简单性 优化 简化 目录 1.1. 概念简单	1 1.2. 语言简单性 弱类型 动态变量 动态实体	1 1.3. 数据结构简单 arr 代替了array map s
- STM32驱动SG90舵机
- python pdf转为图片