Pagini recente » Cod sursa (job #2938577) | Cod sursa (job #2450367) | Cod sursa (job #2741502) | Cod sursa (job #1740439) | Cod sursa (job #1510497)
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
using namespace std;
int a[202][202],b[202][202],n,m,c[202][202];
int f(int x, int y)
{
int i,j,l[202],r[202],poz[202],vf,max=0;
for(i=1; i<=m; i++)
if(a[x][i]==1)
b[x][i]=0;
else
b[x][i]=1;
for(i=x+1; i<=y; i++)
for(j=1; j<=m; j++)
if(a[i][j]==0)
b[i][j]=b[i-1][j]+1;
else
b[i][j]=0;
for(i=x; i<=y; i++)
b[i][0]=b[i][m+1]=-1;
for(i=x; i<=y; i++)
{
vf=1;
poz[1]=m+1;
for(j=m; j>=0; j--)
{
while(b[i][poz[vf]]>b[i][j])
{
l[poz[vf]]=j;
vf--;
}
vf++;
poz[vf]=j;
}
poz[1]=0;
vf=1;
for(j=1; j<=m+1; j++)
{
while(b[i][poz[vf]]>b[i][j])
{
r[poz[vf]]=j;
vf--;
}
vf++;
poz[vf]=j;
}
for(j=1; j<=m; j++)
if(max<b[i][j]*(r[j]-l[j]-1))
max=b[i][j]*(r[j]-l[j]-1);
}
return max;
}
int main()
{
freopen ("bmatrix.in","r",stdin);
freopen ("bmatrix.out","w",stdout);
int maxa=0,i,j,c;
char s[202];
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++)
{
scanf("%s",s+1);
for(j=1; j<=m; j++)
if(s[j]=='0')
a[i][j]=0;
else
a[i][j]=1;
}
for(i=1;i<n;i++)
{
c=f(1,i)+f(i+1,n);
if(c>maxa)
maxa=c;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
b[j][i]=a[i][j];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
a[i][j]=b[i][j];
/*aux=n;
n=m;
m=aux;*/
swap(n,m);
for(i=1;i<n;i++)
{
c=f(1,i)+f(i+1,n);
if(c>maxa)
maxa=c;
}
printf("%d",maxa);
return 0;
}