#P2246. Matrix Chain Multiplication

    ID: 1247 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>动态规划线性代数数据结构Ulm Local 1996

Matrix Chain Multiplication

描述

假设你需要计算一个类似 ABCDEA*B*C*D*E 的表达式,其中 A,B,C,DA, B, C, DEE 都是矩阵。

由于矩阵乘法满足结合律,乘法的计算顺序可以任意选择。然而,所选择的计算顺序会极大地影响所需的基本乘法次数。

例如,设 AA 是一个 50×1050 \times 10 的矩阵,BB 是一个 10×2010 \times 20 的矩阵,CC 是一个 20×520 \times 5 的矩阵。

计算 ABCA*B*C 有两种不同的策略,即 (AB)C(A*B)*CA(BC)A*(B*C)

第一种策略需要 1500015000 次基本乘法,而第二种策略仅需 35003500 次。

你的任务是编写一个程序,根据给定的计算策略,确定所需的基本乘法次数。

输入

输入分为两部分:矩阵列表和表达式列表。

输入文件的第一行包含一个整数 nn1n261 \leq n \leq 26),表示第一部分中矩阵的数量。接下来的 nn 行,每行包含一个大写字母(表示矩阵的名称)和两个整数(表示矩阵的行数和列数)。

输入文件的第二部分严格遵循以下语法(用 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