南邮 OJ 1417 Tiling a Grid With Dominoes

Tiling a Grid With Dominoes

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 15            测试通过 : 12 

比赛描述

We wish to tile a grid 4 units high and N units long with rectangles (dominoes) 2 units by one unit (in either orientation). For example, the figure shows the five different ways that a grid 4 units high and 2 units wide may be tiled.


Write a program that takes as input the width, W, of the grid and outputs the number of different ways to tile a 4-by-W grid. 



输入

The first line of input contains a single integer N, (1 ≤ N ≤ 1000) which is the number of datasets that follow.
Each dataset contains a single decimal integer, the width, W, of the grid for this problem instance.

 

输出

For each problem instance, there is one line of output: The problem instance number as a decimal integer (start counting at one), a single space and the number of tilings of a 4-by-W grid. The values of W will be chosen so the count will fit in a 32-bit integer.

 

样例输入

3
2
3
7

样例输出

1 5
2 11
3 781

题目来源

Greater New York Region 2007



#include<iostream>
#define MAX_N 31
int dp[MAX_N][16];
int main(){
	int i,n,c;
	dp[1][0]=dp[1][3]=dp[1][6]=dp[1][12]=dp[1][15]=1;
	for(i=2;i<MAX_N;i++){
		dp[i][0]=dp[i-1][15];
		dp[i][3]=dp[i-1][15]+dp[i-1][12];
		dp[i][6]=dp[i-1][15]+dp[i-1][9];
		dp[i][9]=dp[i-1][6];
		dp[i][12]=dp[i-1][15]+dp[i-1][3];
		dp[i][15]=dp[i-1][15]+dp[i-1][0]+dp[i-1][3]+dp[i-1][6]+dp[i-1][12];
	}
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&c);
		printf("%d %d\n",i,dp[c][15]);
	}
}






你可能感兴趣的:(ACM,grid,南邮OJ,tiling)