0是可以计入面积的,求最大正方形的面积
样例输入
4 5
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 1 0
样例输出
4
p[i][j]记录以i,j为右下角加上这里能找的的最大的正方形
p[i][j]=min(p[i-1][j],min(p[i-1][j-1],p[i][j-1])+1;
min是找之前的,+1是因为,以它为右下角正好能再加一
#include <iostream>
#include <cstdio>
using
namespace
std;
int
a[1401][1401],n,m,f[1401][1401],ans;
int
main()
{
cin>>n>>m;
for
(
int
i=1;i<=n;++i)
{
for
(
int
j=1;j<=m;++j)
{
scanf
(
"%d"
,&a[i][j]);
if
(a[i][j]==0) f[i][j]=min(min(f[i][j-1],f[i-1][j]),f[i-1][j-1])+1;
ans=max(ans,f[i][j]);
}
}
cout<<ans*ans;
}