我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?
比如n=3時,2*3的矩形塊有3種覆蓋方法:
思路:n=1時有1種,n=2時有2種,n=3時有三種。考慮n=4,可以分成2,2;1,3;3,1 有7種
第一思路就是拆分,n=5時,就拆成1,4;4,1;2,3;3,2;而且1,4和4,1的種類數一樣,求一種*2就可。後來發現當4拆成豎著的4個小矩形時,這種情況有重複。於是又畫了幾種,發現重複的太多了,這種思路幾乎行不通。
換思路倒著想放入的最後一塊小矩形有兩種情況:乙個是豎著放,乙個是橫著放。橫著放的其下面肯定有乙個橫著的小矩形。
所以這兩種情況分別有f(n-1)種和f(n-2)種,感覺很眼熟,恰好是斐波那契!
class solution ;
while(number-1!=0)
return a[1];}}
};
劍指Offer程式設計題 矩形覆蓋
題意 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?解題思路 將乙個問題縮小化,分治法 如果如果選擇豎方向填充,那麼該問題的規模就縮減為對於剩餘的2 number 1 的大矩形的填充。方法數為rectcover n 1...
劍指offer第10題 矩形覆蓋
題目 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?自己手寫前四個,你就會發現,依然是斐波那契額數列。同樣,關於青蛙跳台階和 青蛙跳台階,也是斐波那契額數列 斐波那契數列,1,2,3,4,5,9。f n f n 1 f...
刷題筆記 Binary watch
include include include using namespace std class solution m count push back i for int i 0 i num i vector a n,n 5 將陣列n的前5個元素作為向量a的初值 vector a n 1 n 4 ...