Problem Description
有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。<br>
Input
输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列。<br>
Output
输出一共有多少种铺设的方法,每组数据的输出占一行。<br>
Sample Input
3
2
8
12
Sample Output
3
171
2731
#include<stdio.h>
int main()
{
long long s[100000] = {1, 3};
int a;
int b;
int i = 2;
for(; i < 100000; i++)
{
s[i] = s[i - 1] + 2 * s[i - 2];
}
scanf("%d", &a);
//while(scanf("%d", &b)!= EOF && b != 0)
while(a--)
{
scanf("%d", &b);
printf("%lld\n", s[b - 1]);
}
return 0;
}
从最后一列方格入数:铺满方式三种:1. 最后一个骨牌竖着放,前面(n - 1)列任意排布;2. 最后两列,每一行横放一个骨牌;
前面(n - 2)列任意排布;3. 最后两列,每一列竖放一个骨牌,前面(n - 2)列任意排布
故f(n) == f(n - 1) + 2 * f(n - 2)