Description
In how many ways can you tile a 3x
n 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#include <stdio.h> #include <stdlib.h> #include <string.h> long long s[31]; long long num(int a) { if(a == 0) { return 1; } if(a == 2) { return 3; } if(s[a] != 0) { return s[a]; } long long sum = 0; sum += 3 * num(a - 2); int temp = a - 2; while(temp > 0) { temp -= 2; sum += 2 * num(temp); } s[a] = sum; return sum; } int main() { int n; memset(s, 0, sizeof(s)); while(scanf("%d", &n) && n != -1) { if(n == 0) { printf("1\n"); } else if(n % 2 != 0) { printf("0\n"); } else { printf("%d\n", num(n)); } } return 0; }