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.
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题目大意:
有一个大小2*N的矩形地板,用规格为2*2和2*1的瓷砖方块去填满它,共有多少种方案
前n-1个不动只有一种,前n-2个不动有两种,a[n]=2*a[n-2]+a[n-1]#include <iostream> #include <cstdio> #include <cstring> using namespace std; int a[300][300]; void sve(int n) { int i,j,k; a[0][0]=1; a[1][0]=1; for(i=2;i<=250;i++) { for(j=0;j<=250;j++) { a[i][j]=a[i][j]+a[i-1][j]+a[i-2][j]+a[i-2][j];//从个位开始每一位进行相加 if(a[i][j]>=10)//进位 { a[i][j+1]+=a[i][j]/10; a[i][j]%=10;//个位在前 } } } for(i=250;i>=0;i--) { if(a[n][i]!=0)//倒着存的,第一个不是0得数就是第一位 break; } for(j=i;j>=0;j--) { printf("%d",a[n][j]); } } int main() { int i,n; while(~scanf("%d",&n)) { memset(a,0,sizeof(a)); sve(n); printf("\n"); } return 0; }