面試題9(變形) 矩形覆蓋

2022-05-06 00:54:13 字數 953 閱讀 2535

思路:設用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形的方法數為fn

1、考慮最後乙個小矩形,假設他是豎著的,那麼前n-1個小矩形可以任意放,有fn-1種放法

2、考慮最後兩個小矩形,假設他們都是橫著放,那麼前n-2個小矩形可以任意放,有fn-2中放法

上面兩種情況是否既包含n個小矩形的所有放法,又不存在重複計算呢?

首先考慮是否會重複,顯然不會,最後兩個小矩形的放法不一樣,不可能重複。

再考慮是否包含了所有情況,我們可以換個角度想想,有沒有一種放法不對應到上面的兩種情況之一,

我們只能考慮最後兩個是否沒對應上,因為前面的n-2個包含了所有放法,顯然不會出現不對應的情況。

遞推公式:fn = fn-1 + fn-2

注:考慮遞推時,最重要的是,不重不漏!!!

code:

1 #include 2 #include 3

using

namespace

std;

4const

int m = 2;5

const

int mod = 1000000007

;6 typedef long

long

ll;7

ll ans[m][m];

8ll tmp[m][m];910

//矩陣乘法

11void

matrixmul(ll mat1[m][m], ll mat2[m][m])

1222

}23 memcpy(mat1, mat3, sizeof

(mat3));24}

2526

//矩陣快速冪

27void matrixquickmod(int

n)2844}

4546

intmain()

4754

return0;

55 }

劍指offer之面試題9 4 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 用數學歸納的思想分析,得出規律。牛客網提交 public class solution if target 2 return init target int...

LeetCode面試題之矩形重疊

矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0 0,2 2 rec2 1 1,3...

劍指offer 面試題9

對於第二道題目,我們可以認為有乙個函式f 放台階數是n時,有f n 種跳法,當台階數n 1時有f n 1 種跳法,以此類推 那麼f n 等於多少呢?青蛙第一次跳有兩種可能,要麼跳乙個台階,要麼跳兩個台階。跳乙個台階後還剩下n 1個台階,n 1個台階跳法有f n 1 種。跳兩個台階後還剩下n 2個台階...