首先是二分快速冪的寫法:
1long
long doexp(int x,inty)2
12return
i;13 }
利用了二分log(n)級的快速迭代平方運算,可以很高效地完成冪運算。
與數的乘冪相類似,矩陣乘法同樣存在結合律,所以可以利用相同的方法加速運算,得到矩陣快速冪。
1//首先定義一下矩陣型別
2 typedef struct
matrixnod
3 matrix;67
//3*3的矩陣乘法
8matrix mat(matrix a,matrix b)919
return
c;20}21
22//
矩陣快速冪 b^n
23 matrix doexpmat(matrix b,int
n)24;31
while
(n)32
37return
a;38 }
形式上來說跟普通的二分快速冪相同
對於這一類題目,解題的核心就在於如何給出乙個可行的矩陣來將初始狀態推到最終需要的結果上。
這裡可以採用dp等思路來把(狀態轉移)矩陣給推出來,話說dp優化裡面本來也就有一項是矩陣優化......殊途同歸啊
矩陣快速冪模板
剛學了矩陣快速冪,花了點時間把之前的 修改一下寫成了矩陣類,就當做模板了.話不多說下面貼 首先是標頭檔案和巨集定義什麼的 include include include using namespace std define inf 1000000000 define maxm 20 define m...
矩陣快速冪模板
矩陣快速冪 o log n nyoj301 580ms 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給你乙個遞推公式 f x a f x 2 b f x 1 c 並給你f 1 f 2 的值,請求出f n 的值,由於f n 的值可能過大,求出f n 對1000007取模後的...
矩陣快速冪模板
struct mat mat operator const mat c return res 上面是我的基本矩陣快速冪模板,其實矩陣快速冪難的不是你怎麼寫,難的是你矩陣怎麼構造。矩陣的構造,就是找遞推關係。要把需要用到的遞推關係包含操作矩陣上去。找到合適的初始向量和合適的操作矩陣,你基本就可以完成題...