Pagini recente » Cod sursa (job #1521884) | Cod sursa (job #2074427) | Cod sursa (job #1437540) | Cod sursa (job #582790) | Cod sursa (job #606592)
Cod sursa(job #606592)
#include <stdio.h>
#include <string.h>
//#include <algorithm>
#define NMax 256
#define INF (1<<15)-1
using namespace std;
const char IN[]="bmatrix.in",OUT[]="bmatrix.out";
int N,M;
short Rez=0;
char a[NMax][NMax];
short T[NMax][NMax] , D[NMax][NMax];
short max(short a,short b){
return a>b ? a : b;
}
short min(short a,short b){
return a<b ? a : b;
}
void rotate(char a[][NMax])
{
int i,j;
static char b[NMax][NMax];
for (i=1;i<=N;++i)
for (j=1;j<=M;++j)
b[M-j+1][i]=a[i][j];
i=N;N=M;M=i;
memcpy(a,b,sizeof(b));
}
void solve()
{
short i,j,k, Min;
memset(T,0,sizeof(T));
for (i=1;i<=N;++i)
for (j=1;j<=M;++j)
D[i][j]= a[i][j]=='0' ? D[i][j-1]+1 : 0;
for (i=1;i<=N;++i)
for (j=1,Min=INF;j<=M;++j,Min=INF)
for (k=1;i-k+1>0;++k)
{
Min=min(Min,D[i-k+1][j]);
T[i][k]=max(max(max(Min*k,T[i][k-1]),T[i][k]),T[i-1][k-1]);
}
for (i=1;i<N;++i)
Rez=max(Rez,T[i][i]+T[N][N-i]);
}
int main()
{
int i;
freopen(IN,"r",stdin);
scanf("%d%d\n",&N,&M);
for (i=1;i<=N;++i) fgets( a[i]+1 , NMax , stdin ),a[i][M+1]=0;
fclose(stdin);
solve();
rotate(a);
solve();
freopen(OUT,"w",stdout);
printf("%d\n",Rez);
fclose(stdout);
return 0;
}