解题思路:
现在长度为i,那么它是在i-1长度基础上新增了1,可以让这新增的1*3区域铺三块1*1的砖,而前面部分就是a[i-1]种排法。另外新增区域也可以考虑跟前一列用2*2的砖一块铺,由于宽度固定为3,那么最后这两列(2*3的区域)可以有两种排法(2*2的砖在上部或在下部),而它们左边的排法是a[i-2]种,因此乘2。
因此得递推公式:a[i] = a[i-1] + 2*a[i-2].
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
__int64 num[40];
void fun()
{
num[1]=1,num[2]=3;
for(int i=3;i<=30;i++){
num[i]=num[i-1]+num[i-2]*2;
}
}
int main()
{
int t,n;
fun();
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%I64d\n",num[n]);
}
return 0;
}