1060: 统计方案

题目描述

在一无限大的二维平面中,我们做如下假设:
1、每次只能移动一格;
2、不能向后走(假设你的目的地是“向上”,那么你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、走过的格子立即塌陷无法再走第二次。
求走n步不同的方案数(2种走法只要有一步不一样,即被认为是不同的方案)。

输入

首先给出一个正整数C,表示有C组测试数据。
接下来的C行,每行包含一个整数n(n<=20),表示要走n步。

输出

请编程输出走n步的不同方案总数;
每组的输出占一行。

样例输入

2
1
2

样例输出

3
7

思路

令f(N)为走N步的不同方案数,同理f(N-1)为走N-1步的不同方案数。

  • N=1时,f(1)=3(上左右三种);
  • N=2时,f(1)表示有f(1)条不同走法的路径,每条路径可以走的步数:
    (1)如果从左边过来,就有右/上两种走法;
    (2)如果从右边过来,就有左/上两种走法;
    (3)如果从下面上来,,就有左/右/上三种走法;

那我们要不要分两类讨论呢?一种是上一步走了左右的,另一种是从下面上来的。

其实不用,因为这两种方法都是包含左/右和上的,因此可以令f(N)=2 * f(N-1)(上一步有两种走法),但是易知从N-2到N-1的走法必定包括向上走一步的走法,所以从N-1到N必定比2 * f(N-1)多一步(情况三是三种走法),即f(N)=2 * f(N-1)+1.

所以递推公式是f(N)=2 * f(N-1)+1.
终止条件是 f(1)=3;

代码(AC)

1060: 统计方案

你可能感兴趣的:(1060: 统计方案)