問題描述:用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。現在問用8個2*1的小矩形無重疊地覆蓋乙個2*8的大矩形,總共有多少種方法?矩形如下:
分析:我們可以把2*8的覆蓋方法記為f(8)。用第乙個1*2的矩形去覆蓋大矩形的最左邊時有兩個選擇,豎著放或橫著放。
如果豎著放,那麼右邊還剩2*7的矩形區域,這種情況下,剩下的區域的覆蓋方法為f(7);
如果橫著放,那麼左邊需要兩個2*1的矩形才可以,那麼剩下2*6的矩形區域,這種情況下,剩下的區域的覆蓋方法為f(6);
根據排列組合裡的加法原理,會有f(8)=f(7)+f(6).
可以看出是斐波那契數列問題,一下子問題就簡單了。
關於斐波那契數列求解問題,讀者可以參看我的部落格文章
這裡我就不再詳細解釋了。
矩形覆蓋問題
我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?這種題,可以借鑑動態規劃的思路分析問題。假設現在n 8 那要求解的問題就是 f 8 如果豎著放舉行,那就剩下了 2 7 的舉行,也就是 f 7 如果橫著放,那就剩下了 2 ...
python 矩形覆蓋問題
題目 思路 遞迴,用列表s來儲存覆蓋方法的個數 n 1時,s 0 1 n 2時,s 1 2 n 3時,此時分為兩個不重複的覆蓋方法 1 2 s 0 s 1 2 1 s 1 1 s 0 減一是為了不計算重複覆蓋方法 n 4時,分為兩種 1 3 s 0 s 2 2 2 s 1 1 s 1 以此類推,可得...
劍指offer 矩形覆蓋問題
我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?我們採用從能夠簡單到複雜的思路思考這個問題,當n 1的時候,只有乙個2 1的矩形,所以只有一種方法,記為f 1 1 當n 2的時候,是兩個2 1的矩形,這時候具有兩種方式去...