#P2246. Matrix Chain Multiplication
Matrix Chain Multiplication
描述
假设你需要计算一个类似 的表达式,其中 和 都是矩阵。
由于矩阵乘法满足结合律,乘法的计算顺序可以任意选择。然而,所选择的计算顺序会极大地影响所需的基本乘法次数。
例如,设 是一个 的矩阵, 是一个 的矩阵, 是一个 的矩阵。
计算 有两种不同的策略,即 和 。
第一种策略需要 次基本乘法,而第二种策略仅需 次。
你的任务是编写一个程序,根据给定的计算策略,确定所需的基本乘法次数。
输入
输入分为两部分:矩阵列表和表达式列表。
输入文件的第一行包含一个整数 (),表示第一部分中矩阵的数量。接下来的 行,每行包含一个大写字母(表示矩阵的名称)和两个整数(表示矩阵的行数和列数)。
输入文件的第二部分严格遵循以下语法(用 EBNF 表示):
SecondPart = Line { Line }
Line = Expression
Expression = Matrix | "(" Expression Expression ")"
Matrix = "A" | "B" | "C" | ... | "X" | "Y" | "Z"
输出
对于第二部分中的每个表达式,如果由于矩阵不匹配而导致计算错误,则输出一行“error”。否则,输出一行,包含按照括号指定的计算顺序所需的基本乘法次数。
输入数据 1
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))
输出数据 1
0
0
0
error
10000
error
3500
15000
40500
47500
15125