题目描述
楼梯有 nn 阶,上楼可以一步上一阶,也可以一步上二阶。
但你不能连续三步都走两阶,计算走到第nn阶共有多少种不同的走法。
输入
一行,一个数字,表示n。
对于100%的数据,保证n≤50。
输出
输出走楼梯的方式总数。
样例输入
6样例输出
12
思路 因为题目要求不能有连续的三个连上两步的,所以要在斐波那契数列的基础上多开一维来表示在该数前三个行为有几个是两步的,所以f[i][0]表示在第i个数的时候前面连续的两个为0,f[i][1]表示在第二个数使从f[i-2][0]两步上来的;
要注意该题的情况要开long long int 因为递归到50数目很大;最后他要的所有情况是·指f[n][0]+f[n][1]+f[n][2]总和
#include<bits/stdc++.h>
using namespace std;
long long int a[60][3];
int main(){
int n;
cin>>n;
a[1][0]=1;
a[2][0]=1;
a[2][1]=1;
for(int i=3;i<=n;i++){
a[i][0]=a[i-1][0]+a[i-1][1]+a[i-1][2];
a[i][1]=a[i-2][0];
a[i][2]=a[i-2][1];
}
printf("%lld",a[n][0]+a[n][1]+a[n][2]);
}