Description
假设你需要计算一个表达式A*B*C*D*E,其中A B C D E都是矩阵。由于矩阵的乘法是关联的,所以乘法执行的顺序是任意的,然而,所需要的乘法的次数很大程度上是取决于表达式的执行顺序。
例如:假设A是50*10的矩阵,B是10*20的矩阵,C是20*5的矩阵,计算A*B*C一共有两种策略,一种是(A*B)*C,另一种是A*(B*C),第一种的表达式的乘法次数是15000,而第二种的乘法次数是3500.
注解:
假定A是m*n矩阵,B是n*p矩阵,那么AB是m*p矩阵,乘法次数是m*n*p,如果A的列数不等于B的行数,则乘法无法进行
你的任务是,编写一个程序,计算并输出给定的一些矩阵链乘表达式所需要的乘法次数。
Input
输入包括两部分,第一部分列举出矩阵的名称和维度,第二部分列举出矩阵链乘的表达式。
第一部分:
第一行是一个整数N,1≤N≤26,表示第一部分中矩阵的个数
接下来N行,每行包含一个大写字母和两个整数,用空格隔开,其中大写字母表示矩阵的名称如A B C...,两个整数分别表示这个矩阵的行数和列数
第二部分:
给出矩阵链乘的表达,一行一个表达式,表达式的格式参考输入样例。
Output
对于输入文件的第二部分的链乘表达式,每个表达式输出一行
如果表达式无法进行乘法,输出一行“error”,否则输出表达式所需要的乘法次数
9
A 50 10
B 10 20
C 20 5
D 30 35
E 35 15
F 15 5
G 5 10
H 10 20
I 20 25
A
B
C
(AA)
(AB)
(AC)
(A(BC))
((AB)C)
(((((DE)F)G)H)I)
(D(E(F(G(HI)))))
((D(EF))((GH)I))
0
0
0
error
10000
error
3500
15000
40500
47500
15125