主要思想:降维,把相同行相加一下对列压缩。。。然后暴力枚举。
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <vector>
#include <cstdlib>
using namespace std;
const double INF=100000000;
int max3(int a,int b,int c)
{
if(a<b) a=b;
return a>c?a:c;
}
int main()
{
int n;
int map[105][105],temp[105];
while(cin>>n)
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
cin>>map[i][j];
int max=-INF;
for(int i=1; i<=n; i++)
{
memset(temp,0,sizeof(temp));
for(int j=i; j<=n; j++)
{
int sum=0;
for(int k=1;k<=n;k++) //压缩矩阵
temp[k]+=map[j][k];
for(int k=1;k<=n;k++) //求最大子序列和
{
if(sum>=0)
sum+=temp[k];
else
sum=temp[k];
if(sum>max) max=sum;
}
}
}
cout<<max<<endl;
}
return 0;
}