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...