题目描述:
题目分析:
很明显是一道dp的题目,因为每一个楼梯的状态都是由上一个或者上上一个转移而来的,但是题目有个约束,要求不能连续三次上两个台阶,所有这就要求我们要用到两层循环,dp[i][j];
dp[i][0] : 走一步到达i阶梯;
dp[i][1] : 走两步到达i阶梯;
dp[i][2] : 连续走跨两个阶梯到达i阶梯;
代码如下:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int dp[55][3];
int n;
signed main(){
cin >> n;
dp[0][0] = 1;
for(int i=0;i<=n;i++){
for(int j=0;j<=2;j++){
if(j < 2){
dp[i+2][j+1] += dp[i][j];//这一次走2
dp[i+1][0] += dp[i][j];//这一次走1
}
else{
dp[i+1][0] += dp[i][j];//只能走1
}
}
}
cout << dp[n][0] + dp[n][1] + dp[n][2] << endl;
return 0;
}