wa #5 但不知道出了什么问题 球解答
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int INF=-1e10;
int n,m,ans=INF;
int ju[10010][10010];
int sum[10010][10010];
int read(){
int f=1,x=0;
char ch;
do{
ch=getchar();
if(ch=='-') f=-1;
}while(ch<'0'||ch>'9');
do{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}while(ch>='0'&&ch<='9');
return f*x;
}
void init(){
n=read(),m=read();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
ju[i][j]=read();
if(!ju[i][j]) ju[i][j]=INF;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+ju[i][j];
}
}
}
signed main(){
init();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=i;k<=n;k++)
for(int p=j;p<=m;p++)
if(i>k||j>p) continue;
else ans=max(ans,sum[k][p]+sum[i-1][j-1]-sum[k][j-1]-sum[i-1][p]);
printf("%lld",ans);
}