矩阵乘法

测试数据来自 system/1178

时间限制:1秒  内存限制:256M


【问题描述】

  在科学计算中经常要计算矩阵的乘积。矩阵 \(A\) 和 \(B\) 可乘的条件是矩阵 \(A\) 的列数等于矩阵 \(B\) 的行数。若 \(A\) 是一个 \(m\) 行、\(n\) 列的矩阵(简称 \(m×n\) 的矩阵),\(B\) 是一个 \(n\) 行、\(p\) 列的矩阵(简称 \(n×p\) 的矩阵),则其乘积 \(C=A×B\) 是一个 \(m×p\) 的矩阵。其标准计算公式为:
        说明
  由该公式知计算 \(C=A×B\) 总共需要进行 \(m×n×p\) 次的数乘法,我们将两个矩阵乘法次数定义为矩阵相互乘的时间复杂度。
  矩阵乘法满足矩阵乘法满足结合律(但不满足交换律),即对于 \(D=A×B×C\),可以有如下两种计算方式:
   \(1、D=(A×B)×C\)  
   \(2、D=A×(B×C)\)
  假设 \(A\) 是个 \(10×100\) 的矩阵、\(B\) 是个 \(100×5\) 的矩阵,\(C\) 是个 \(5×50\) 的矩阵,那么:
   ●按照第一种计算方法得到的时间复杂度是:\(10×100×5+10×5×50=7500\);
   ●按照第一种计算方法得到的时间复杂度是:\(100×5×50+10×100×50=75000\);
  所以不同的计算顺序得到的时间复杂度是不一样的,现在的问题是:顺序给出n个矩阵的大小,请计算出它们的乘积的最小的时间复杂度。

【输入格式】

  第一行输入一个正整数 \(n\),表示有 \(n\)个矩阵。接下来 \(n\) 行每行两个正整数 \(X_i,Y_i\),其中第 \(i\) 行的两个数表示第 \(i\) 个矩阵的规模为 \(X_i\) 行、\(Y_i\) 列。所有的 \(X_i,Y_i<=100\)。

【输出格式】

  \(n\) 个矩阵连乘最小时间复杂度。

【输入输出样例】

 Input

3
10 100
100 5
5 50

 Output

7500

【数据限制】

  \(2<=n<=100\)

【来源】

  Mr.he

信息

ID
1189
难度
9
分类
动态规划 点击显示
标签
(无)
递交数
6
已通过
1
通过率
17%
上传者