hihocoder第41周 骨牌覆蓋(矩陣快速冪)

2022-08-24 21:15:09 字數 918 閱讀 2279

由於棋盤只有兩行,所以如果第i列的骨牌豎著放,那麼就轉移為第1列到第i-1列骨牌有多少種擺法

如果第一行第i列骨牌橫著放,那麼第二行第i列也要橫著放,那麼就轉移為了第1列到第i-2列骨牌有多少種方法

dp[i] = dp[i-1] + dp[i-2],但是列數太多了。 這種遞推的算式可以用矩陣快速冪來優化

所以時間複雜度瞬間變為o(logn)

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include

11 #include

12 #include 13

using

namespace

std;

14 typedef long

long

ll;

15const

int inf = 1

<<30;16

ll ans;

17const

int mod = 19999997;18

//矩陣快速冪 a[i] = a[i-1] + a[i-2]

1920

struct

matrix21;

24 matrix operator*(const matrix &lhs, const matrix &rhs)

2538 matrix operator^(matrix a, int

k)39

52return

ret;53}

5455

intmain()

5669

return0;

70 }

view code

hiho 41周 骨牌覆蓋一

題目 骨牌,一種古老的玩具。今天我們要研究的是骨牌的覆蓋問題 我們有乙個2xn的長條形棋盤,然後用1x2的骨牌去覆蓋整個棋盤。對於這個棋盤,一共有多少種不同的覆蓋方法呢?舉個例子,對於長度為1到3的棋盤,我們有下面幾種覆蓋方式 第1行 1個整數n。表示棋盤長度。1 n 100,000,000輸出 第...

hihoCoder 骨牌覆蓋問題 一

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述骨牌,一種古老的玩具。今天我們要研究的是骨牌的覆蓋問題 我們有乙個2xn的長條形棋盤,然後用1x2的骨牌去覆蓋整個棋盤。對於這個棋盤,一共有多少種不同的覆蓋方法呢?舉個例子,對於長度為1到3的棋盤,我們有下面幾種覆蓋方式 ...

hihoCoder 骨牌覆蓋問題 一

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述骨牌,一種古老的玩具。今天我們要研究的是骨牌的覆蓋問題 我們有乙個2xn的長條形棋盤,然後用1x2的骨牌去覆蓋整個棋盤。對於這個棋盤,一共有多少種不同的覆蓋方法呢?舉個例子,對於長度為1到3的棋盤,我們有下面幾種覆蓋方式 ...