Tri Tiling
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2301 Accepted Submission(s): 1314
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
当n>=4时会有两种特殊的组合,需要特别考虑。f(n)'=3*f(n-2)+2f(n-4)+2+.......2*f(0); 所以可以通过运算化简此式子 f(n-2)=3*f(n-4)+2*f(n-6)+2*f(n-8)+......2*f(0);
f(n)-f(n-2)=3*f(n-2)-f(n-4);
应为此类运算数值一定超出int 型范围所以要用__int64和long long 型相同,并且OJ系统默认了a[0]=1;
#include<stdio.h>
#define LIM 32
long long a[LIM]={1,0,3,0,11};
int main()
{
int n,i,j;
for(i=5;i<LIM;i++)
{
a[i]=4*a[i-2]-a[i-4];
}
while(scanf("%d",&n))
{
if(n==-1)
break;
printf("%lld\n",a[n]);
}
return 0;
}