这个题感觉还能用单调栈优化,但是目前水平用前缀和做出来已经很不容易了。。。后续再优化一下时间复杂度。
#include<bits/stdc++.h>
using namespace std;
int a[130][130];
int b[130][130];
int main(){
ios::sync_with_stdio(0);
int n;
cin>>n;
memset(a,0,sizeof (a));
memset(b,0,sizeof (b));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
b[i][j]=a[i][j]+b[i-1][j]+b[i][j-1]-b[i-1][j-1];
}
}
int ans=INT_MIN;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int x=i;x<=n;x++){
for(int y=j;y<=n;y++){
ans=max(ans,b[x][y]-b[x][j-1]-b[i-1][y]+b[i-1][j-1]);
}
}
}
}
cout<<ans<<endl;
return 0;
}