天天看点

算法学习之路|poj1050(最大子矩阵和)

题目大意:对于n*n的矩阵,求它的最大子矩阵和。

其实就是最大子串和的扩展版本,当然首先尝试用最大子串和的变体解决这道题。

首先考虑到求矩阵的每一个子矩阵和都可以首先对行或列累加,就把二维矩阵求和转化成一维数组求和。把这一点想办法转化到求最大子串和。

可以初始化时对输入矩阵进行处理,ai表示第i行前j个数字之和。

在计算所有子矩阵的和时,用i,j控制子矩阵的左右区间,用k遍历子矩阵每一行(也就是把子矩阵同行数字相加,成一列一维数组,对这个数组用求最大子串和的方法即可求出最大值)。而调整初始矩阵是为了避免重复累加数据,节省时间。

代码:

继续阅读