Tiling
Description
In how many ways can you tile a 2xn rectangle by 2x1 or 2x2 tiles?
Here is a sample tiling of a 2x17 rectangle. ![]() Input
Input is a sequence of lines, each line containing an integer number 0 <= n <= 250.
Output
For each line of input, output one integer number in a separate line giving the number of possible tilings of a 2xn rectangle.
Sample Input 2 8 12 100 200 Sample Output 3 171 2731 845100400152152934331135470251 1071292029505993517027974728227441735014801995855195223534251 Source |
[Submit] [Go Back] [Status] [Discuss]
递推+大数,知道递推公式,首项,找套路
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
int num[300][1000];
int main()
{
int n,i,j,k,t;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
{
printf("1\n");
continue;
}
memset(num,0,sizeof(num));
num[0][0]=1;
num[1][0]=3;
for(i=2;i<=250;i++)
{
int c=0;
for(j=0;j<1000;j++)
{
num[i][j]=num[i-1][j]+num[i-2][j]*2+c;
}
for(j=0;j<1000;j++)
{
if(num[i][j]>=10)
{
num[i][j+1]+=num[i][j]/10;
num[i][j]%=10;
}
}
}
for(i=999;i>=0;i--)
{
if(num[n-1][i]) break;
}
for(;i>=0;i--)
{
printf("%d",num[n-1][i]);
}
printf("\n");
}
return 0;
}