Tri Tiling
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2168 Accepted Submission(s): 1240
Problem Description
In how many ways can you tile a 3xn rectangle with 2x1 dominoes? Here is a sample tiling of a 3x12 rectangle.

Input
Input consists of several test cases followed by a line containing -1. Each test case is a line containing an integer 0 ≤ n ≤ 30.
Output
For each test case, output one integer number giving the number of possible tilings.
Sample Input
2 8 12 -1
Sample Output
3 153 2131
Source
解题思路:求3*n的地板可以由1*2的木板无缝拼接的方案种数,首先n的奇数的时候肯定无法拼接,当n为偶数的时候,把整个看成f[i]由j*3和f[i-j]两部分组成,j*3的部分是不由2*3拼接而来的方案种数,j=2时仅有3种方案,j!=2时有2种方案
#include <cstdio>
int main()
{
int f[31];
int i,j;
int n;
f[0]=1;
for(i=1;i<=30;i+=2) f[i]=0;
for(i=2;i<=30;i+=2)
{
f[i]=0;
for(j=2;j<=i;j+=2)
{
if(j==2) f[i]+=3*f[i-j];
else f[i]+=2*f[i-j];
}
}
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d",&n),n!=-1) printf("%d\n",f[n]);
return 0;
}