D - Tiling_easy version
HDU - 2501
有一個(gè)大小是 2 x n 的網(wǎng)格蛋哭,現(xiàn)在需要用2種規(guī)格的骨牌鋪滿挪哄,骨牌規(guī)格分別是 2 x 1 和 2 x 2屋摔,請(qǐng)計(jì)算一共有多少種鋪設(shè)的方法酷含。
Input
輸入的第一行包含一個(gè)正整數(shù)T(T<=20),表示一共有 T組數(shù)據(jù)哨毁,接著是T行數(shù)據(jù)枫甲,每行包含一個(gè)正整數(shù)N(N<=30),表示網(wǎng)格的大小是2行N列挑庶。
Output
輸出一共有多少種鋪設(shè)的方法言秸,每組數(shù)據(jù)的輸出占一行。
Sample Input
3
2
8
12
Sample Output
3
171
2731
解法:瓷磚問題迎捺,基礎(chǔ)情況有三種举畸,豎放一個(gè)2x1、橫放兩個(gè)2x1凳枝、放一個(gè)2x2抄沮,開始用遞歸,時(shí)間暴了岖瑰,然后正著算叛买,對(duì)于第n個(gè)單位可以看成第n-1個(gè)單位加一個(gè)2x1,或者第n-2個(gè)單位放一個(gè)2x2或兩個(gè)2x1蹋订,所以a[n] = a[n-1] + a[n-2]*2率挣。
代碼:
#include<iostream>
using namespace std;
int a[35];
int main()
{
int num;
cin>>num;
a[1]=1,a[2]=3;
for(int i=3;i<=30;i++)
a[i]=a[i-2]*2+a[i-1];
for(int i=0;i<num;i++){
int n;
cin>>n;
cout<<a[n]<<endl;
}
}