hdu 2041 超级楼梯
2018-03-13 23:29
232 查看
Problem Description
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2
2
3
Sample Output
1
2
思路:
递推问题,走上第M级;由于每次只能上一级或两级;
所以走到第M级的走法等于走到第M-1级和M-2级走法之和;
即:f(n)=f(n-2)+f(n-1) 菲波拉契数列
f(1)=0,因为开始就站在第1级台阶上;
f(2)=1,只能从第1级台阶上1级;
f(3)=2,只能从第1级台阶上2级,或只能从第2级台阶上1级;
f(n)=f(n-2)+f(n-1),n>3。
注意:
若使用递归,时间会爆
果断打表
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
Input
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。
Output
对于每个测试实例,请输出不同走法的数量
Sample Input
2
2
3
Sample Output
1
2
思路:
递推问题,走上第M级;由于每次只能上一级或两级;
所以走到第M级的走法等于走到第M-1级和M-2级走法之和;
即:f(n)=f(n-2)+f(n-1) 菲波拉契数列
f(1)=0,因为开始就站在第1级台阶上;
f(2)=1,只能从第1级台阶上1级;
f(3)=2,只能从第1级台阶上2级,或只能从第2级台阶上1级;
f(n)=f(n-2)+f(n-1),n>3。
注意:
若使用递归,时间会爆
果断打表
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; long long F(int n){ long long f[45]; f[1]=0; f[2]=1; f[3]=2; if(n>3){ for(int i=4;i<=n;i++){ f[i]=f[i-1]+f[i-2]; } } return f ; } int main(){ int n,T; cin>>T; while(T--){ cin>>n; cout<<F(n)<<endl; } return 0; }
相关文章推荐
- HDU 2041 超级楼梯(dp)
- HDU 2041 超级楼梯
- HDU - 2041 超级楼梯
- HDU - 2041 超级楼梯 (斐波那契dp)
- HDU-2041-超级楼梯
- HDU 2041 超级楼梯(斐波那契数列)
- HDU 2041 超级楼梯
- 超级楼梯 HDU-2041
- hdu 2041 超级楼梯(递推)
- HDU 2041 超级楼梯
- hdu 2041 超级楼梯(简单dp)
- HDU 2041 超级楼梯
- HDU 2041 超级楼梯
- HDU 2041--超级楼梯题解(递推求解专题)
- [递推简单dp]-hdu 2041 超级楼梯
- HDU 2044 一只小蜜蜂... HDU 2041 超级楼梯
- hdu 2041 超级楼梯
- HDU 2041 超级楼梯
- HDU 2041 超级楼梯
- HDU 2041 超级楼梯