SHUOJ 1611 矩陣連乘問題(dp)

2021-07-23 16:22:05 字數 1000 閱讀 6515

給定n個矩陣a1,a2,…,an,其中,ai與aj+1是可乘的,i=1,2,…,n-1。

你的任務是要確定矩陣連乘的運算次序,使計算這n個矩陣的連乘積a1a2…an時總的元素乘法次數達到最少。

例如:3個矩陣a1,a2,a3,階分別為10×100、100×5、5×50,計算連乘積a1a2a3時按(a1a2)a3所需的元素乘法次數達到最少,為7500次。

測試資料有若干組,每組測試資料有2行。

每組測試資料的第1行是乙個整數n,(00、p1、p2、…、pn,這些整數不超過100,相鄰兩個整數之間空一格,他們表示n個矩陣a1,a2,…,an,的階pi-1´pi,i=1,2,…,n。

輸入直到檔案結束。

對輸入中的每組測試資料,輸出2行。先在一行上輸出「case #」,其中「#」是測試資料的組號(從1開始),再在第2行上輸出計算這n個矩陣的連乘積a1a2…an時最少的總的元素乘法次數,再空一格,接著在同一行上輸出矩陣連乘的添括號形式。

注意:最外層括號應去掉。

310 100 5 50450 10 40 30 5

case 1

7500 (a1a2)a3

case 2

10500 a1(a2(a3a4))

現在的我果然還只是個蒟蒻,dp一片混沌。。希望半年後我回頭看時能豁然開朗吧0.0

強推dp最重要的是遞推關係,遞推關係如下:

對不起這個公式我是推不出來的。。我照著別人的公式推還推了半天。。

那麼跨過了dp遞推公式的難關,這個題還有乙個難點是如何列印括號,

這裡是使用遞推進行括號匹配的。

(注意如果大於乙個矩陣的話,遞推公式會把最前面和最後面的括號也打出來,不符合題意,需要自己刪除)

附上渣渣調了半天才過的ac code:

小夥子好好學啊 真的要**去新部落格找找吧= =(一年前的** = =)

矩陣連乘問題

矩陣連乘問題 應用動態規劃演算法,將前面計算的重複值儲存,一次來推進下一步的計算,直到得到m 1 n 的值,為最少的乘法次數 m i j 表示計算a i.j 所需的最少數乘次數 m i j min i s i j 記錄斷開位置,也就是最少計算次數的中間位置。include using namespa...

矩陣連乘問題

由於矩陣的乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序。這中計算次序 可以用加括號的方式來確定。例如,矩陣連乘積a1a2a3a4可以有5種不同的完全加括號方式 a1 a2 a3a4 a1 a2a3 a4 a1a2 a3a4 a1 a2a3 a4 a1a2 a3 a4 矩陣a和b可乘的條...

矩陣連乘問題

矩陣連乘問題 問題分析 最優子結構性質假設n個矩陣連乘的最優加括號方案為 a1.ak ak 1.an 注 此處省略了a1.ak,ak 1.an兩個子矩陣內部的括號 則加括號方案 a1.ak 是子矩陣鏈a1.ak的最優加括號方案,ak 1.an 是ak 1.an的最優加括號方案。證明略。但可證明該假設...