1. 程式人生 > >鋪地磚-中國石油大學oj(程式碼待補)

鋪地磚-中國石油大學oj(程式碼待補)

鋪地磚

題目描述

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

輸入

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

輸出

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

樣例輸入

樣例資料
3
樣例輸出
5

提示

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

解析

  先設一個f[i]表示i* 3的地板鋪的方法,f[1]=1;f[2]=3
  i* 3的地板數是這樣得到的:
  (i-1)* 3的地板比i* 3的地板少的地方全鋪上1* 1的瓷磚,只有一種鋪法;或者在(i-2)* 3的地板比i* 3的地板少的地方鋪上2* 2的瓷磚和2個1* 1的瓷磚,這有兩種鋪法
  所以得到遞推式:f[i]=f[i-1]+2* f[i-2];
  於是乎.得到了遞推式,我們就可以愉快的解決這個題了不存在的.
  然後算一算髮現超int了,那就換long long,發現還是超,換unsigned long long,發現又在n=62:3074457345618258603炸了.
  emm,nice,所以suo要用大數板子.
  不會

.
  於是看了一下遞推式,嗯,齊次的,可以套特徵方程.
  8
  化為
  7
  解得
  6
  然後套入特徵方程得
  5
  根據f[1]和f[2]的值我們可以解出A和B的值
  4
  3
  2
  隨後再把A,B的值帶回f[n]求得f[n]的特徵方程為:
  1
  然後只要求解2n+1的值就可以解決問題了不會
於是…可以選擇特徵方程解決問題,也可以用遞推公式解決問題.好像都大數板子