hdu 2041:超级楼梯(水题,递归)
超级楼梯Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 23642 Accepted Submission(s): 12153Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。Output 对于每个测试实例,请输出不同走法的数量Sample Input 2 2 3Sample Output 1 2Author lcySource 2005实验班短学期考试 Recommend lcy
水题,递归。
很有意思的一道递归题,用普通的递归会超时,需要改用记忆递归法。记忆递归法,牺牲空间来换取时间,可以采用数组(数组空间浪费大,但是读取速度快)。
code:
1 Problem : 2041 ( 超级楼梯 ) Judge Status : Accepted 2 RunId : 8925185 Language : G++ Author : freecode 3 Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta 4 5 #include <iostream> 6 using namespace std; 7 8 /* 用普通递归会超时,改用记忆递归法(将数据存储在数组里) 9 int m; 10 11 int f(int n) 12 { 13 if(n>m) 14 return 0; 15 else if(n==m) 16 return 1; 17 else 18 return f(n+1)+f(n+2); 19 } 20 */ 21 22 int main() 23 { 24 /* 25 int T; 26 cin>>T; 27 while(T--){ 28 cin>>m; 29 cout<<f(1)<<endl; 30 } 31 */ 32 33 int a[41]; 34 a[1]=1,a[2]=1; 35 36 for(int i=3;i<=40;i++) //记忆递归法。牺牲空间,换取时间。 37 a[i]=a[i-1]+a[i-2]; 38 39 int T,m; 40 cin>>T; 41 while(T--){ 42 cin>>m; 43 cout<<a[m]<<endl; 44 } 45 return 0; 46 }
第二次做。
水题。
常规做法会超时,输出几组连续的测试数据会发现,输出结果是斐波那契数列。那么题目就简单了,直接构造一个40以内的斐波那契数列即可,f1=1,f2=1。
常规做法是写一个递归,作用是记录当前走到了哪一级阶梯(假设为n),所以出口是当n>M(直接return;)或者n==M(sum++;return ;),递归体是f(n+1)然后f(n+2),分别表示当前走1级阶梯和2级阶梯的情况。
代码:
1 #include <iostream>2 3 using namespace std;4 int sum;5 int m;6 int a[41];7 void f()8 {9 a[1] = 1; 10 a[2] = 1; 11 for(int i=3;i<=40;i++) 12 a[i] = a[i-1] + a[i-2]; 13 } 14 int main() 15 { 16 int n; 17 f(); 18 cin>>n; 19 while(n--){ 20 cin>>m; 21 cout<<a[m]<<endl; 22 } 23 return 0; 24 }
Freecode : www.cnblogs.com/yym2013
hdu 2041:超级楼梯(水题,递归)相关推荐
- HDU - 2041 - 超级楼梯(dp)
题意: 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? 思路: 如何到第n阶台阶,只能从n-1和n-2台阶上去,那么只需要计算到n-1阶台阶和到n-2阶台 ...
- HDU 2041 超级楼梯
Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是 ...
- 航电 2041 超级楼梯
超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 杭电hduoj 2041 超级楼梯
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2041 算法特工队QQ群:979618872 (伸手党绕边,欢迎有良好基础的人加入) // // Cre ...
- HDU 6168 Numbers 思维 水题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6168 题目描述: 定义数组b是由数组a每两项的和组成的,现在将数组A, B混在一起给你, 筛出数组A ...
- HDOJ 2041 超级楼梯
Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是 ...
- HDU 4393 Throw nails [水题]
题解写了N多方法,我用的是最水的那种.. 起始区间只有(0 <= Fi <= 500),500秒之后排名必然不会变化了..所以,暴力500秒,然后排个序就行了. 1 #include &l ...
- HDU - 2091 空心三角形 水题,但是有点坑...
空心三角形 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- hdu 4823 Energy Conversion(水题)
Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
最新文章
- Visual Studio中断NPM套件库服务
- postman接口测试和压力测试
- 二十、Pyecharts数据可视化
- 路径处理库pathlib使用详解
- jquery easyui 弹出消息框
- GetModuleHandle(NULL)获取当前DLL模块基址?
- 【转载】关于 Google Chrome 中的全屏模式和 APP 模式
- 使用Matlab(R2018b)画复杂函数的图形(网格图meshgrid)及等高线contour
- Idea 依赖冲突一分钟解决2种方案
- 蒙特卡罗模拟法 —— python
- 画出计算机网络的一般组成,计算机网络习题(有答案).pdf
- 再回首Java第二天
- 都说程序员穿衣就是这么丑,你该看看人家硅谷精英
- Python3.6 安装pandas包的方法
- Vmware中linux端口映射,让外网/ssh访问虚拟机Linux
- 计算机毕业设计的读书笔记,毕业设计之读书笔记
- hadoop进阶---hadoop性能优化(一)---hdfs空间不足的管理优化
- antd日期组件配置了中文后还是显示英文的解决过程
- linux访问局域网共享,精解局域网访问及共享(三)
- 电脑中PDF如何转换成WPS格式
热门文章
- 动力节点的课堂笔记_男孩把历史笔记画成“漫画”,同学成小粉丝,网友:别人家的孩子...
- SpringDataJpa使用原生sql(EntityManager)动态拼接,分页查询
- liunx 学习笔记-wzq
- iOS网络缓存扫盲篇
- IOS后台运行机制详解(一)
- Http协议原理解析
- linux ftp 团队认证,linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建
- 驱动华为_再补齐一个短板,华为正式宣布进军屏幕驱动行业
- oracle游标的基础应用,Oracle 基础的游标的使用
- 计算机网络有限制,计算机网络中软件限制策略的应用规则有哪些