给出n阶台阶,每次只可以前进一步或者两步,中途有一次机会可以后退一步,这次机会也可以不使用,到达最后一个台阶一共有多少种走法?
#include<iostream>
using namespace std;
int jump(int n){
int dp[n+1];
dp[0]=0;
dp[1]=1;
dp[2]=3;
for(int i=3; i<=n; i++){
dp[i]=dp[i-1]+dp[i-2];
}
//此时的dp[n]为不回跳的走法总数
for(int i=1; i<=n; i++){//假设在i阶回跳,将此时作为台阶重新计数点即n=n-i+1
dp[n] +=dp[i-1]*dp[n-i+1];//f[i]×f[n−i+1]
}
return dp[n];
}
int main(){
int number;
cin >>number;
cout<<jump(number)<<endl;
return 0;
}