您的位置:首页 > 其它

NYOJ 超级台阶

2016-02-28 21:51 211 查看
超级台阶

时间限制:1000 ms | 内存限制:65535 KB

难度:3

描述

有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?

注:规定从一级到一级有0种走法。

输入

输入数据首先包含一个整数n(1<=n<=100),表示测试实例的个数,然后是n行数据,每行包含一个整数m,(1<=m<=40), 表示楼梯的级数。

输出

对于每个测试实例,请输出不同走法的数量。

样例输入

2

2

3

样例输出

1

2

从1到m的种数与从m到1的种数是一样的,dp[m]表示从m走到1的种数,已知从m往回走可以走一步或两步,则dp[m]=dp[m-1]+dp[m-2];即答案就是斐波那契数列;

dp[1]=1;dp[2]=1;但要记得处理细节, 即先判断,当m==1时,要输出0, 而不是1;

AC代码:

# include <iostream>
using namespace std;
long long int dp[50];
int main(){
int n, t, i, j, k;
cin>>t;
dp[1]=1;
dp[2]=1;
for(i=1; i<=t; i++){
cin>>n;
if(n==1){
cout<<0<<"\n";
continue;
}
for(j=3; j<=n; j++){
dp[j]=dp[j-1]+dp[j-2];
}
cout<<dp
<<"\n";
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: