uva 442 - Matrix Chain Multiplication (记忆化搜索 | 重做一年前的题)




本文出自   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)


代码


你可能感兴趣的:(uva,区间DP)