最大正方形

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;
}
原文地址:https://www.cnblogs.com/fanhao050109/p/11147905.html