问题描述:从第一阶楼梯开始,每次只能上一阶或者两阶 请问到达第n阶有多少种方案
输入一个t 代表样例数量,接下来t行每行有一个数字代表台阶数量
输出有t行,每行输出对应的方案数
simple input:
4
1
2
3
4
simple output:
1
2
3
5
容易想到初始条件:零阶一阶均为只有一种方案,下面我们看第i阶的情况
当前走到第i阶那么他的上一个状态是两种:1.上一次走了两阶到达第i阶 即dp[i] += dp[i-2] 2.上一次走了一阶到达第i阶 dp[i]+=dp[i-1]
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 10010;
int dp[maxn];
int n;
//每次只能走一阶或者两阶 dp[0] = d[1] = 1;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
fill(dp,dp+maxn,0);
dp[0]=dp[1]=1;
for(int i=2; i<=n; i++)
dp[i]=dp[i-1]+dp[i-2]; //即如果上一次走了一阶 此次次数+减一阶次数,如果两阶 此次次数 = 减两阶次数
printf("%d\n",dp[n]);
}
return 0;
}