hdu 統計問題 (遞推)
阿新 • • 發佈:2019-01-07
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]);
}
}