解析:
從求最大子段和思想出發。對於二維矩陣我們按照列枚舉一段
上面有兩個藍顏色的方塊,代表着兩列。我們把這兩列用前綴和表示。就轉化成一維的求最大子段和問題了。
所以我們只需要枚舉即可
#include<bits/stdc++.h>
using namespace std;
const int N=150;
int g[N][N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>g[i][j];
g[i][j]+=g[i-1][j];
}
// int last=0;
int res=0;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
{
int last=0;
for(int k=1;k<=n;k++)
{
last=max(last,0)+g[j][k]-g[i-1][k];
res=max(res,last);
}
}
cout<<res<<endl;
}