超级楼梯
来源:互联网 发布:sql server入门到精通 编辑:程序博客网 时间:2024/04/30 12:22
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output 对于每个测试实例,请输出不同走法的数量
Sample Input
2
2
3
Sample Output
1
2
这道题是个经典的递归推理题,也可以用dp原理解释,是互通的;
直接求第N级台阶是不可能的,那么我们来分析一下:
当N=2时,由第1级台阶到第2级台阶只有一种走法——走一步;记为a2;
当N=3时,由第1级台阶到第三级台阶有两种走法——(1)走两步,(2)走一步;记为a3;
当N=4时,可以看作由第二级台阶到第四级台阶,为a2步;或由第三级台阶到第四级台阶,为a3步;共计a2+a3步;
......
当第N级时,可以看作由第N-2级台阶到第N级,为aN-2;或由第N-1级台阶到第N级,为aN-1;共计aN-2+aN-1;
所以可以得到递归方程:F(N)=F(N-2)+F(N-1);
#include <iostream>#include <algorithm>#include <stdio.h>#include <cstring>#define INF 0x3f3f3f3fusing namespace std;long long cnt[45];void rec(int n){ cnt[1]=1; cnt[2]=1; for(int i=3; i<=40; i++) cnt[i]=cnt[i-1]+cnt[i-2];}int main(){ int N; cin >> N; rec(40); while(N--){ int M; cin >> M; cout << cnt[M] << endl; } return 0;}
阅读全文
0 0
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- 超级楼梯
- C++实现静态顺序表的增删查改
- JDT Compilation Error deploying Contract Management Ear File (文档 ID 2088882.1)
- LaTex(PART I)第一个LaTex程序
- selenium技术学习-浏览器操作
- 浅析ThreadPoolExecutor的执行过程
- 超级楼梯
- poj 1062 昂贵的聘礼
- Android 切换至surfaceView闪屏(黑屏)
- android:总结自定义软键盘遇到的小问题
- centOS7_64 安装后图形化界面启动不了以及网络连接不上的解决方案(粗略提供涉及的命令)
- Unable To Access OGG Director Web: Error-404 (文档 ID 1527182.1)
- STM32F051 I2C slave mode
- JavaScript数据类型主要有哪些?
- kafka集群搭建