POJ 1050
如题,求矩阵中的最大子矩阵
input
4
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
output
15
可以想到一维的情况:最大连续子序列
降纬处理:
sum[i][j]表示从第1行第j列到第i行第j列的和
sum[i][j] = sum[i-1][j]+s[i][j];
两层for循环枚举矩阵的上下边界
然后求上下边界内的数据降纬后的最大连续子序列
核心代码
for(i = 1;i <= n;i ++)
for(j = i;j <= n;j ++)
{
now = 0;
for(k = 1;k <= n;k ++)
{
if(now>0) now += (sum[j][k]-sum[i-1][k]);
else now = (sum[j][k]-sum[i-1][k]);
maxx = max(maxx,now);
}
}