problem 4 : matrix
矩陣乘法
問題描述
乙個a x b的矩陣乘以乙個b x c的矩陣將得到乙個a x c的矩陣,時間複雜度為a x b x c。矩陣乘法滿足結合律(但不滿足交換律)。順序給出n個矩陣的大小,請問計算出它們的乘積的最少需要花費多少時間。
輸入資料
第一行輸入乙個正整數n,表示有n個矩陣。
接下來n行每行兩個正整數xi,yi,其中第i行的兩個數表示第i個矩陣的規模為xi x yi。所有的xi、yi<=100。輸入資料保證這些矩陣可以相乘。
輸出資料
輸出最少需要花費的時間。
樣例輸入
3 10 100
100 5
5 50
樣例輸出
7500
樣例說明
順序計算總耗時7500;先算後兩個總耗時75000。
時間限制
各測試點1秒
記憶體限制
你的程式將被分配32mb的執行空間
資料範圍
n<=100。
這是一道簡單的動態規劃,我們只需要將這個矩陣看成乙個序列就好了,每次乘可以消掉中間的乙個數,那麼我們設f[i][j]表示矩陣中留下i號點與j號點的最小花費,那麼我們有f[i][j]=min(f[i][k]+f[k][j]+a[i]*a[k]*a[j])但是一開始我做的時候忽略了迴圈順序的關係,直接列舉了i,j,k,就導致了錯誤,本題應該是層數優先,最外面一層列舉跨度,所以也請大家多注意動態規劃的這些細節。
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
long
long f[105][105];
int a[105];
int main()
a[n+1]=y;
n++;
memset(f,0x1f,sizeof(f));
for(int i=1;i<=n;i++) f[i][i+1]=0;
for(int t=2;t<=n-1;t++)
for(int i=1;i<=n;i++)
動態規劃 矩陣鏈乘法
矩陣鏈乘法問題 給定n個矩陣的鏈,矩陣ai的規模為p i 1 p i 求完全括號化方案,使得計算乘積a1a2 an所需標量乘法次數最少。m i j 表示矩陣鏈ai j所需標量乘法次數的最小值。m i j 0 i j m i j m i k m k 1 j p i 1 p k p j i k s 1....
動態規劃 矩陣鏈乘法
兩個矩陣相乘的計算量,對於一般的矩陣乘法來說,如矩陣a m,n 與矩陣b n,p 相乘需要進行的加法次數為m n p次乘法 由於矩陣乘法滿足結合律,因此矩陣相乘的結合性,會影響整個計算表示式的乘法執行次數 如下面的例子,a b c三個矩陣相乘,其中a 10,5 b 5,20 c 20,3 1 ab ...
動態規劃 矩陣鏈乘法
def matrix multipy a,b 乘法得到的是乙個 a.rows,b.cols 的矩陣,相當於a.rows個向量的b.cols次的向量線性加權 ifnot a.shape 1 b.shape 0 a組中向量的維度與b組中向量的維度一致 print error else 將每乙個元素都初始...