思路:設用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 3using
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個台階...