Pagini recente » Cod sursa (job #573652) | Cod sursa (job #2687714) | Monitorul de evaluare | Cod sursa (job #204428) | Cod sursa (job #2031330)
#include <bits/stdc++.h>
using namespace std;
int Largest(char A[205][205],int n,int m){
int v[205]={0};
int Max=-1;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j)
if(A[i][j]=='0') ++v[j];
else v[j]=0;
for(int j=1;j<=m;++j){
int Min=v[j];
for(int k=j;k<=m;++k){
Min=min(Min,v[k]);
Max=max(Max,(k+1-j)*Min);
}
}
}
return Max;
}
char A[205][205],X[205][205],Y[205][205];
int main(){
freopen("bmatrix.in","r",stdin);
freopen("bmatrix.out","w",stdout);
int n,m;
scanf("%d %d\n",&n,&m);
for(int i=1;i<=n;++i)
fgets(A[i]+1,205,stdin);
int Max=-1;
/// CAZ 1 TAIETURA VERTICALA
for(int k=0;k<=m;++k){
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(j<=k) X[i][j]=A[i][j];
else Y[i][j-k]=A[i][j];
int Sol=Largest(X,n,k)+Largest(Y,n,m-k);
if(Sol>Max)
Max=Sol;
}
/// CAZ 2 TAIETURA ORIZONTALA
for(int k=0;k<=m;++k){
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(i<=k) X[i][j]=A[i][j];
else Y[i-k][j]=A[i][j];
int Sol=Largest(X,k,m)+Largest(Y,n-k,m);
if(Sol>Max)
Max=Sol;
}
printf("%d\n",Max);
return 0;
}