import java.util.Scanner;
public class StairCanBack {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] dp = new int[n + 1];
for(int i = 0; i <= n; i++){
dp[i] = dp[i - 2] + dp[i - 1];
}
int res = dp[n];//不发生回退的走法数
for(int i = 1; i < n; i++){//只有[1,n-1]范围内才能发生回退
res += dp[i] * dp[n - i + 1];//i台阶处回退,则还剩n - i + 1个阶梯未走完
}
System.out.println(res);
}
}
-
解题思路: 1、先计算未发生回退的走法数 2、再加上发生回退的走法数 2.1、只有[1,n-1]范围内才可能发生回退。 0:因为还未走所以不可能发生回退; n:走完阶梯了还没发生回退,已经记录在未发生回退里了。 2.2、计算在i处发生回退的走法 走到i处的走法数 * 还需要走的阶梯数的走法数