1. 程式人生 > >hdu 統計問題 (遞推)

hdu 統計問題 (遞推)

Problem Description
在一無限大的二維平面中,我們做如下假設:
1、 每次只能移動一格;
2、 不能向後走(假設你的目的地是“向上”,那麼你可以向左走,可以向右走,也可以向上走,但是不可以向下走);
3、 走過的格子立即塌陷無法再走第二次;

求走n步不同的方案數(2種走法只要有一步不一樣,即被認為是不同的方案)。
Input
首先給出一個正整數C,表示有C組測試資料
接下來的C行,每行包含一個整數n (n<=20),表示要走n步。
Output
請程式設計輸出走n步的不同方案總數;
每組的輸出佔一行。
Sample Input
2
1
2
Sample Output
3
7
思路:這題我剛開始用BFS做的,不過潮記憶體了,後來發現可以遞推做;
因為n+1時都可以往兩個方向或者三個方向;三個方向是為n時向上的狀態;為n時有多少個向上的狀態?當n-1有多少狀態,n就有多少個向上的狀態;所以遞推公式為a[n]=2*a[n-1]+a[n-2];
程式碼:

#include<stdio.h>
int main()
{
    int a[25];
    a[0]=1;
    a[1]=3;
    for(int i=2;i<=20;i++)
    {
            a[i]=2*a[i-1]+a[i-2];
    }
    int n,t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        printf("%d\n",a[n]);
    }
}