# include <algorithm>
# include <iostream>
# include <string.h>
# include <stdio.h>
using namespace std;
int map1[1010][1010];
char a[1010][1010];
int map[1010][1010];
int ans;
int i,j,n,m;
int l[1010],r[1010];
void slove (char t1,char t2, char t3, char t4)
{
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(a[i][j]==t1||a[i][j]==t2||a[i][j]==t3||a[i][j]==t4)
map1[i][j]=1;
else
map1[i][j]=0;
}
}
for(i=1; i<=m; i++)
map[0][i]=0;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
if(map1[i][j]==1)
map[i][j]=map[i-1][j]+1;
else
map[i][j]=0;
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
l[j]=r[j]=j;
for(j=2; j<=m; j++)
{
if(!map[i][j])
continue;
while(l[j]>1&&map[i][l[j]-1]>=map[i][j])
l[j]=l[l[j]-1];
}
for(j=m-1; j>=1; j--)
{
if(!map[i][j])
continue;
while(r[j]<m&&map[i][r[j]+1]>=map[i][j])
r[j]=r[r[j]+1];
}
for(j=1; j<=m; j++)
{
int temp=(r[j]-l[j]+1)*map[i][j];
ans=max(ans,temp);
}
}
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
for(i=1; i<=n; i++)
scanf("%s",a[i]+1);
ans=0;
slove('a','w','y','z');///做三次hdu1505
slove('b','w','x','z');
slove('c','x','y','z');
printf("%d\n",ans);
}
return 0;
}
hdu 2870 Largest Submatrix (hdu1505加强版)
最新推荐文章于 2019-04-16 20:39:31 发布