题目描述
在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。
输入输出格式
输入格式:
输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔开,0或1.
输出格式:
一个整数,最大正方形的边长
输入输出样例
输入样例#1: 复制
4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1
输出样例#1: 复制
2
*****这是一个DP题,转移方程见代码
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 int i,j,n,m,f[105][105] = {0},a[105][105],ans = 0; 7 int main() 8 { 9 scanf("%d %d",&n,&m); 10 for(i = 1;i <= n;i++) 11 { 12 for(j = 1;j <= m;j++) 13 { 14 scanf("%d",&a[i][j]); 15 if(a[i][j] == 1) 16 { 17 f[i][j] = min(f[i - 1][j],min(f[i][j - 1],f[i - 1][j - 1])) + 1; 18 } 19 ans = max(ans,f[i][j]); 20 } 21 } 22 printf("%d",ans); 23 return 0; 24 }