#include<cstdio>
#include<cstring>
using namespace std;
int matrix[1005][1005];
int h[1005];
int r[1005];
int l[1005];
int main(int argc,char *argv[])
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&matrix[i][j]);
}
}
memset(h,0,sizeof(h));
int ans=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(matrix[i][j]==1)
h[j]++;
else
h[j]=0;
}
h[0]=h[m+1]=-1;
for(j=1;j<=m;j++)//l[i]表示h[i]左边最远的一个h值不小于h[i]的位置
{ //即l[i]到i的所有h值均>=h[i],r[i]同理
k=j;
while(h[j]<=h[k-1])
k=l[k-1];
l[j]=k;
}
for(j=m;j>=1;j--)//r[i]表示h[i]右边最远的一个h值不小于h[i]的位置
{
k=j;
while(h[j]<=h[k+1])
k=r[k+1];
r[j]=k;
}
for(j=1;j<=m;j++)
{
if(ans<h[j]*(r[j]-l[j]+1))
ans=h[j]*(r[j]-l[j]+1);
}
}
printf("%d\n",ans);
}
return 0;
}
/**************************************************************
Problem: 1497
User: cust123
Language: C++
Result: Accepted
Time:380 ms
Memory:4976 kb
****************************************************************/
题目1497:面积最大的全1子矩阵
最新推荐文章于 2021-07-20 15:14:34 发布