鋪地磚
阿新 • • 發佈:2018-12-21
題目描述
一天,晨晨的數學老師佈置了一道題目,大意如下:用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"); }