最大子矩阵

xiaoxiao2021-02-28  139

描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。 比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 的最大子矩阵是 9 2 -4 1 -1 8 这个子矩阵的大小是15。 输入 输入是一个N * N的矩阵。输入的第一行给出N (0 < N <= 100)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N 2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。 输出 输出最大子矩阵的大小。 样例输入 4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 样例输出

15

题意

前缀和

题解

#include <cstdio> #include <iostream> #include <algorithm> int i,j,k,l,m,n,ans,sum; int a[101][101]; int main() { scanf("%d",&n); for (i=1;i<=n;i++) for (j=1;j<=n;j++) { scanf("%d",&a[i][j]); if (a[i][j]>ans) ans=a[i][j]; a[i][j]+=a[i-1][j];//前缀和处理  } for (i=1;i<=n;i++)//枚举减去的行  for (j=i;j<=n;j++)//枚举选取的行  { sum=0; for (k=1;k<=n;k++)//枚举列数  { sum=sum+(a[j][k]-a[i-1][k]); if (sum>ans) ans=sum; if (sum<0) sum=0; } } printf("%d",ans); }

转载请注明原文地址: https://www.6miu.com/read-27014.html

最新回复(0)