本文出自 http://blog.csdn.net/shuangde800
给出一系列的矩阵,给他们取名A ,B…… 并且给出了它们的行数和列数。给完后,给出一系列的表达式,然后要求求出按这些表达式进行计算,会有多少次乘法步骤。
这题去年的暑假是有做过的,在《入门经典》的数据结构专题 ...打开
现在在看一年前的代码,无论是方法还是代码都觉得不是一般地搓 - -||
在过几个月后看今天写的代码还是会觉得搓吧。
不过这次既然归到了dp专题,那么就用dp的方法来做吧。
(以上是题外话)
很明显看出可以递归求解,而且可转为递推区间dp求解
f(i, j) 表示在(i,j)区间中一共有几次相乘
row(i, j)表示这个区间相乘后的矩形行尺寸
col(i, j) 表示这个区间相乘后的矩形列尺寸
递归时维护这三个数组即可
那么如果str[i]='('且str[j]=')', 就递推求解子问题f(i+1, j-1)
如果只有一边是括号,那么递推求解f(i+1, j) 和 f(i, j-1)
接着枚举终点k, 当这个划分合法时:
f(i, j) = f(i,k) + f(i,k+1) + row(i,k)*row(k+1,j)*col(k+1,j)