题目描述:
楼梯有 n 阶,上楼可以一步上一阶,也可以一步上二阶。
但你不能连续三步都走两阶,计算走到第n阶共有多少种不同的走法。
对于100%的数据,保证n≤50。
主要思路:
之前做过基础版的爬楼梯,就是斐波那契数列的问题,但是这次加上了一个限制。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
ll f[60][10];
int main()
{
int x;
cin>>x;
f[0][0]=1;
for(int i=0;i<=x;i++)
{
for(int j=0;j<=2;j++)
{
if(j!=2)
f[i+2][j+1]+=f[i][j];
f[i+1][0]+=f[i][j]; //这里第一次写的时候出了点问题! 注意是0,因为这一次走了一步,j直接中断了!
}
}
ll ans=f[x][0]+f[x][1]+f[x][2];
cout<<ans<<endl;
return 0;
}