求取矩阵具有最大和的子矩阵
比如在如下这个矩阵中:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
拥有最大和的子矩阵为:
9 2
-4 1
-1 8
其和为15。
我们先看对于一维数组求取最大和的子数组,可以采用动态规划的方法。
数组为vec[],设dp[i] 是以vec[i]结尾的子数组的最大和,对于元素vec[i+1],
它有两种选择:
a、vec[i+1]接着前面的子数组构成最大和,
b、vec[i+1]自己单独构成子数组。
则dp[i+1] = max{dp[i]+vec[i+1], vec[i+1]}
回头看二维矩阵,例如
如果把最大子矩阵同列的加起来,我们可以得到一个一维数组
{a[q][i]+·····+a[p][i] , ····· ,a[q][j]+·····+a[p][j]} ,现在我们可以看出,这其
实就是一个一维数组的最大子段问题。如果把二维数组看成是纵向的一维数组和横向的一维数组
接下来给出代码:
#计算一维数组中的最大子数组,返回最大子数组的范围