1. 程式人生 > >鋪地磚

鋪地磚

題目描述
一天,晨晨的數學老師佈置了一道題目,大意如下:用1×1和2×2的磁磚不重疊地鋪滿n×3的地板,共有多少種方案?
例如:n=1時:1×3的地板方法就一個,直接由三個1×1的磁磚鋪滿。
n=2時:2×3的地板可以由下面3種方案鋪滿:

輸入
第一行:一個整數n(1≤n≤100)。

輸出
輸出鋪滿n×3的地板的方案數。

樣例輸入
3
樣例輸出
5

提示
對於20%的資料,1≤n≤15;
對於50%的資料,1≤n≤30;
對於100%的資料,1≤n≤100;

遞推+大資料計算

#include <bits/stdc++.h>
#include <stdio.h>
int f[105][1000];
using namespace std;
int fun(int a[],int b[],int c[])
{
	int f=0,t;
	for(int i=0;i<999;i++){
		t=(b[i]+2*c[i]+f)/10;
		a[i]=(b[i]+2*c[i]+f)%10;
		f=t;
	}
}
int main()
{
	int n;
	f[0][0]=1;f[1][0]=3;
	
	scanf("%d",&n);
	for(int i=2;i<n;i++){
		fun(f[i],f[i-1],f[i-2]);
	}
	int i=999;
	while(f[n-1][i]==0) i--;
	for(;i>=0;i--){
		printf("%d",f[n-1][i]);
	}
	printf("\n");	
}