Description
有一个n*m的01矩阵,想找出一个只包含1的最大正方形,输出这个正方形的边长。
Input
多组数据,第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,只有0或1.
Output
一个整数,最大正方形的边长
每个输出占一行。
Sample Input
3 3
1 1 1
1 1 0
1 1 0
Sample Output
2
/*
dp值取决于min(上,左,左上)+1;
是0的话则dp值为0
*/
#include <bits/stdc++.h>
using namespace std;
int a[101][101],dp[101][101];
int main()
{
int n,m,ans;
while(cin>>n>>m)
{
ans=-0x3f3f3f3f;
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]==1)
{
dp[i][j]=min(dp[i-1][j],dp[i][j-1]);
dp[i][j]=min(dp[i][j],dp[i-1][j-1])+1;
if(ans<dp[i][j])
ans=dp[i][j];
}
}
cout<<ans<<endl;
}
return 0;
}