【题解-信息学奥赛一本通】1224:最大子矩阵

【题解-信息学奥赛一本通】1224:最大子矩阵

题目:1224:最大子矩阵

题目描述

已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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 N^2N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[−127,127]。

输出

输出最大子矩阵的大小。

时空限制

1s / 64MB

样例输入

4 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2

样例输出

15

代码

#include<bits/stdc++.h>usingnamespacestd;constintN=100+10;intn,a,s[N][N],res=-1e9,p,q,ans;inthe(intx,inty,intr,intt){returns[r][t]-s[r][y-1]-s[x-1][t]+s[x-1][y-1];}intmain(){cin>>n;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++){cin>>a;res=max(res,a);s[i][j]=s[i][j-1]+s[i-1][j]-s[i-1][j-1]+a;}for(inti=1;i<n;i++)for(intj=1;j<=n;j++){for(intk=1;k<=n;k++)for(intb=1;b<=n;b++){p=i+k-1,q=j+b-1;if(p>=1&&p<=n&&q>=1&&q<=n){ans=he(i,j,p,q);res=max(res,ans);}}}cout<<res;return0;}

结果