这类题目体现了DP的实质,也是经典问题。(•̀˓◞•́)
假设我们要用标准的矩阵乘法计算M1M1、M2M2、M3M3的乘积M1M2M3M1M2M3,这三个矩阵的维数分别是2x10,10x2,2x10。
- 如果我们先把M1M1和M2M2相乘,然后把结果和M3M3相乘,即((M1M2)M3)((M1M2)M3)。那么要进行2x10x2+2x2x10=80次乘法;
- 如果我们先乘M2M2M3M3,结果再与M1M1相乘,即(M1(M2M3))(M1(M2M3))。那么数量乘法的次数就变成了:10x2x10+2x10x10=400。
可见,矩阵链相乘时的顺序不同,运算量也不同。而我们的目的是找到一种乘法顺序使得运算量最小。
递推关系式
我们注意到,对于矩阵链M1M2...MiM1M2...Mi,矩阵MiMi的列数一定等于矩阵Mi+1Mi+1的行数(1≤i<n1≤i<n),这是由矩阵乘法的定义决定的。
因此,对于一个矩阵链,我们指定每个矩阵的行数和最右面矩阵M