二分方法做的,WA了 #1
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[210][210],sum[210][210],ans;
bool check(int mid,int i,int j){
int cnt=0;
for(int k=1;k<=mid;k++){
cnt+=sum[j][k]-sum[i-1][k];
}
if(cnt>0)return true;
for(int k=mid+1;k<=m;k++){
cnt-=sum[j][k-mid]-sum[i-1][k-mid];
cnt+=sum[j][k]-sum[i-1][k];//向后转移
if(cnt>0)return true;
}
return false;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
sum[i][j]=sum[i-1][j]+a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
int l=1,r=m,len=0;
while(l<=r){
int mid=l+r>>1;
if(check(mid,i,j))len=mid,l=mid+1;
else r=mid-1;
}
ans=max(ans,len*(j-i+1));
}
}
cout<<ans;
return 0;
}