题目描述
有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。
输入
输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列。
输出
输出一共有多少种铺设的方法,每组数据的输出占一行。
样例输入 Copy
3 2 8 12
样例输出 Copy
3 171 2731
/*
f(n) = f(n-1) + 2*f(n-2)
*/
#include<iostream>
using namespace std;
int main()
{
long long result[31] = { 0,1,3 };
for (int i = 3; i <= 30; i++) {
result[i] = result[i - 1] + 2 * result[i - 2];
}
int C;
cin >> C;
while (C--) {
int n;
cin >> n;
cout << result[n] << endl;
}
}