由於棋盤只有兩行,所以如果第i列的骨牌豎著放,那麼就轉移為第1列到第i-1列骨牌有多少種擺法
如果第一行第i列骨牌橫著放,那麼第二行第i列也要橫著放,那麼就轉移為了第1列到第i-2列骨牌有多少種方法
dp[i] = dp[i-1] + dp[i-2],但是列數太多了。 這種遞推的算式可以用矩陣快速冪來優化
所以時間複雜度瞬間變為o(logn)
1 #include 2 #includeview code3 #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 }
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的棋盤,我們有下面幾種覆蓋方式 ...