錯題本 矩陣乘法 簡單動態規劃

2021-07-16 07:53:08 字數 1211 閱讀 4714

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 將每乙個元素都初始...