假设你必须做A*B*C*D*E的运算,在这里A,B,C,D,E都是矩阵(matrix)。由于矩阵相乘具有连接性(associative),所以相乘的顺序可以是任意的。然而所需要的基本乘法数却与不尽相同。

例如:A是个50*10的矩阵,B是个10*20的矩阵,C是个20*5的矩阵。那么就有2种不同的表示式来求出A*B*C。分别是(A*B)*C和A*(B*C)。而其所需用到的基本乘法数前者为15000次,后者为3500次。

给你某一种矩阵相乘的表示式,你的任务是写一个程序算出需要多少个基本乘法。

Input
输入分为2部分。第一部份为矩阵的数据,第二部分为矩阵相乘的表示式。
第一列有一个整数n(1<= n <= 26),代表在输入的第一部份有多少个矩阵。接下来的n列每列为一矩阵的数据。内容为1个大写英文字母及2个整数,分别代表矩阵的名字,栏数(rows)及列数(columns)。
输入的第二部分每列为一测试数据,内容为矩阵相乘的表示式。表示式严格的遵守以下的语法(以EBNF的形式)
SecondPart = Line { Line } <EOF>
Line = Expression <CR>
Expression = Matrix |“(”Expression Expression“)”
Matrix =“A”|“B”|“C”|…|“X”|“Y”|“Z”
请参考Sample Input。

Output
对输入第二部分的每组测试数据输出一列。如果该表示式为不合法的矩阵相乘,则输出error。否则请输出此表示式所需的乘法次数。请参考Sample Output。

Sample Input

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

Sample Output

0
0
0
error
10000
error
3500
15000
40500
47500
15125

最新文章

  1. scala shuffle
  2. [原]关于flash GPU渲染的一些不完全测试(wmode,ie,chrome)
  3. oracle:自定义多行合并聚合函数
  4. Asp.net--Ajax前后台数据交互
  5. jquery之获取当前时间
  6. javascript第十三课:Json
  7. 【动态规划】Gym - 101102A - Coins
  8. 二叉树的递归遍历 The Falling Leaves UVa 699
  9. android 串口开发第二篇:利用jni实现android和串口通信
  10. hadoop2.6.0实践:A03 例子验证
  11. OpenCV空洞填充算法
  12. hadoop 数据倾斜
  13. 拾人牙慧篇之——linux文件挂载,基于nfs的文件共享系统安装配置
  14. [转]Tor Browser在国内Windows平台下的超详细教程
  15. springcloud流程图
  16. 《Go学习笔记 . 雨痕》方法
  17. Linq学习教程
  18. WebRTC入门
  19. 使WebDev.WebServer.exe 当web服务器
  20. am335x uboot启动流程分析

热门文章

  1. 笔记(tm_springboot)
  2. 《深入理解Java虚拟机》读书笔记一
  3. 题解【AcWing176】装满的油箱
  4. javascript 循环读取数组中的值
  5. Reverse is Multiplex, You Need PinTools.
  6. Servlet相关配置
  7. TCP/IP详解,卷1:协议--链 路 层
  8. EditPlus等编辑器选中列(块)的方法
  9. 素问 - REITs
  10. Dreamoon and WiFi