定義三個矩陣a,b,c,其中行和列分別為\(m\times n,n \times p,m\times p\),(其中行是從上往下數的,列是從左往右數的)
\(c_=\sum_^a_\times b_\)
矩陣乘法具有結合律,但沒有交換律,可以乘方、求逆。
做矩陣優化dp的題目步驟:
\(1\quad\)把\(dp\)方程推出來(假如不能手推,可以先打\(10\)項左右的表,然後再寫乙個程式找每一項的係數,一般不會超過\(5\)項,否則矩陣太大了)
\(2\quad\)打橫把係數寫出來(注意\(i-1\)先寫,接下來是\(i-2\),以此類推,沒有的項補\(0\))
\(3\quad\)把矩陣補成項數$\times $項數,下面從第乙個位置開始,對角線上寫\(1\)(第一行忽略,其他寫\(0\))
\(4\quad\)把初始矩陣按下標從大到小寫出來,一定要打豎
\(5\quad\)把題目要求的第\(n\)項的先減去矩陣的邊長,然後進行快速冪,最後初始矩陣的第乙個數就是答案
其實大家可以用橫著寫初始矩陣,豎著寫係數的方法理解,但是為了減少常數,我們不可能兩個矩陣開到一樣大,所以我們適應計算機的理解,豎著寫更方便,而且基本正確。
還可以用判斷是否為\(0\)、改變轉移順序、人工\(mod\)的速度來卡常數。
對於一些不止一維的題目,可以把後面幾維順著寫下去(像二維並查集一樣),有常數項的可以寫到矩陣裡面去。
理論時間複雜度:\(o(\log_(\times n})\)其中\(n\)是要求的第n項答案,\(p\)是矩陣的大小。
程式碎片 矩陣乘法優化 dp,遞迴
usingsystem usingsystem collections generic namespacesdproject privatevoidinitial this.mlist newlist martix array int m newint 5,5 publicvoidgetbestso...
學習筆記 矩陣乘法及其優化dp
1.定義 c i j sum a i k times b k j 所以矩陣乘法有條件,n m m p n p 即第乙個矩陣的列數等於第二個矩陣的行數,否則沒有意義。2.結合律與分配率 矩陣乘法不一定任何時候都有交換律。因為交換後甚至不能保證第乙個矩陣的列數等於第二個矩陣的行數。但是,矩陣乘法有結合律...
矩陣鏈乘法 DP
矩陣鏈乘法是這樣的問題 給定n個矩陣 a1,a2,an,其中ai與ai 1是可乘的,i 1,2 n 1。確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。輸入資料為矩陣個數和每個矩陣規模,輸出結果為計算矩陣連乘積的計算次序和最少數乘次數。我們稱有如下性質的矩陣乘積鏈為完全括...