链接: https://www.luogu.org/problemnew/show/P1387
题目描述
在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长。
输入格式
输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m个数字,用空格隔开,0或1.
输出格式
一个整数,最大正方形的边长
input:
4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1
output
2
解法:dp或者二分
令$dp[i][j]$表示$(i, j)$作为右下角最后一个的最长的正方形长度
显然它可以由左上方转移而来,但也可能从新增一圈,所以还需要看左边和上方。
三者取最小再加1即可。
状态转移方程
$dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1$
1 |
|