最大子矩阵

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);
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_30358129/article/details/79312810