POJ 2663 Tri Tiling

来源:互联网 发布:产品在淘宝没有展现 编辑:程序博客网 时间:2024/04/30 11:44

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

2812-1

Sample Output

31532131

关键是找出递推公式。

当n为偶数时:

f(n) = 3 * f(n - 2) + 2 * f(n - 4) + 2 * f(n - 6) + .... + 2 * f(0)

f(0) = 1

当n为奇数时:

f(n) = 0

#include<stdio.h>#include<string.h>int a[30];int func(int n){int i, sum = 0;if(n == 0) return 1;if(a[n] != 0) return a[n];for(i = n - 2; i >= 0; i -= 2){if(i == n - 2) sum += 3 * func(i);else sum += 2 * func(i);}a[n] = sum;return sum;}int main(){int n;    memset(a, 0, sizeof(a));    while(1){   scanf("%d", &n);   if(n == -1) return 0;   if(n % 2) printf("0\n");    else printf("%d\n", func(n));    }return 0;}


0 0
原创粉丝点击