Problem Description
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.
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.
Input
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.
Each dataset contains a single decimal integer, the width, W, of the grid for this problem instance.
Output
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.
Sample Input
3
2
3
7
Sample Output
1 5
2 11
3 781
#include <cstdlib> #include <iostream> using namespace std; long long dp[1010]; int main(int argc, char *argv[]) { dp[0]=1; dp[1]=1; dp[2]=5; dp[3]=11; for(int i=4;i<=1000;i++) { dp[i]=dp[i-1]+4*dp[i-2]; for(int j=3;j<=i;j++) if(j&1) dp[i]+=2*dp[i-j]; else dp[i]+=3*dp[i-j]; } int n,cas=1,ca; cin>>ca; while(ca--) { cin>>n; cout<<cas++<<" "<<dp[n]<<endl; } return 0; }