FZU 1061 矩陣連乘

2021-07-10 13:49:28 字數 1267 閱讀 6290

description

給定n個矩陣,考察這n個矩陣的連乘積a1a2...an。由於矩陣乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序,這種計算次序可以用加括號的方式來確定。

矩陣連乘積的計算次序與其計算量有密切關係。例如,考察計算3個矩陣連乘積的例子。設這3個矩陣的維數分別為10*100,100*5,和5*50。若按(a1a2)a3計算,3個矩陣連乘積需要的數乘次數為10*100*5+10*5*50 = 7500。若按a1(a2a3)計算,則總共需要100*5*50+10*100*50 = 75000次數乘。

現在你的任務是對於乙個確定的矩陣連乘方案,計算其需要的數乘次數。

input

輸入資料由多組資料組成。每組資料格式如下: 

第一行是乙個整數n (1≤n≤26),表示矩陣的個數。 

接下來n行,每行有乙個大寫字母,表示矩陣的名字,後面有兩個整數a,b,分別表示該矩陣的行數和列數,其中1output

對於每組資料,輸出僅一行包含乙個整數,即將該矩陣連乘方案需要的數乘次數。如果運算過程中出現不滿足矩陣乘法法則的情況(即左矩陣列數與右矩陣的行數不同),則輸出「error」。

sample input3

a 10 100

b 100 5

c 5 50

a(bc)

sample output

75000

簡單的棧模擬。

#include#include#include#includeusing namespace std;

const int maxn=1e4;

int t,n,tot=26,flag,ans;

char s[maxn];

struct rec

void read()

}a[maxn];

rec operator*(rec a,rec b)

int main()

p.pop(); int k=q.top(); q.pop();

while (!q.empty())

p.push(k);

}else p.push(s[i]-'a');

} while (!p.empty())

int k=q.top(); q.pop();

while (!q.empty())

if (flag) printf("%d\n",ans);

else printf("error\n");

} return 0;

}

FZU1061 矩陣連乘 C STL應用

problem 1061 矩陣連乘 給定n個矩陣,考察這n個矩陣的連乘積a1a2.an。由於矩陣乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序,這種計算次序可以用加括號的方式來確定。矩陣連乘積的計算次序與其計算量有密切關係。例如,考察計算3個矩陣連乘積的例子。設這3個矩陣的維數分別為10...

python矩陣連乘 動態規劃 矩陣連乘問題

一 問題描述 給定n個數字矩陣a1,a2,an,其中ai與ai 1是可乘的,設ai是pi 1 pi矩陣,i 1,2,n。求矩陣連乘a1a2.an的加括號方法,使得所用的乘次數最少。例子三個矩陣連乘,可以有 a1a2 a3和a1 a2a3 兩種方法求積 乘法次數分別為 p0p1p2 p0p2p3和p0...

矩陣連乘問題

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