Pagini recente » Cod sursa (job #1812337) | Cod sursa (job #809258) | Cod sursa (job #653627) | Cod sursa (job #2660601) | Cod sursa (job #2125806)
# include <fstream>
using namespace std;
ifstream fin("bmatrix.in");
ofstream fout("bmatrix.out");
char ch[205];
int d[205][205],v[205][205],nr[205][205],st[205][205];
int dr[205][205],s[205],n,m,i,j,k,ii,jj,val,maxim;
int sol(int n,int m){
int maxim=0,u;
for(i=1;i<=n;i++){
u=1;
s[1]=0;
nr[i][0]=-1;
nr[i][m+1]=n+1;
for(j=1;j<=m+1;j++){
if(d[i][j]==0)
nr[i][j]=nr[i-1][j]+1;
else
nr[i][j]=0;
while(nr[i][j]<=nr[i][s[u]]){
dr[i][s[u]]=j-1;
maxim=max(maxim,nr[i][s[u]]*(dr[i][s[u]]-st[i][s[u]]+1));
u--;
}
st[i][j]=s[u]+1;
s[++u]=j;
}
}
return maxim;
}
int main () {
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>ch+1;
for(j=1;j<=m;j++)
v[i][j]=ch[j]-'0';
}
for(k=n/5;k<n-n/5;k++){
for(i=1;i<=k;i++)
for(j=1;j<=m;j++)
d[i][j]=v[i][j];
val=sol(k,m);
for(i=k+1;i<=n;i++)
for(j=1;j<=m;j++)
d[i-k][j]=v[i][j];
val+=sol(n-k,m);
maxim=max(maxim,val);
}
for(k=m/5;k<m-m/5;k++){
for(i=1;i<=n;i++)
for(j=1;j<=k;j++)
d[i][j]=v[i][j];
val=sol(n,k);
for(i=1;i<=n;i++)
for(j=k+1;j<=m;j++)
d[i][j-k]=v[i][j];
val+=sol(n,m-k);
maxim=max(maxim,val);
}
fout<<maxim<<"\n";
return 0;
}