最大正方形(前缀和)
归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
唯有主动付出,才有丰富的果实获得收获!
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
唯有主动付出,才有丰富的果实获得收获!
题目描述
在一个 n × m n\times m n×m 的只包含 0 0 0 和 1 1 1 的矩阵里找出一个不包含 0 0 0 的最大正方形,输出边长。
输入格式
输入文件第一行为两个整数 n , m ( 1 ≤ n , m ≤ 100 ) n,m(1\leq n,m\leq 100) n,m(1≤n,m≤100),接下来 n n n 行,每行 m m m 个数字,用空格隔开, 0 0 0 或 1 1 1。
输出格式
一个整数,最大正方形的边长。
输入输出样例 #1
输入 #1
4 4
0 1 1 1
1 1 1 0
0 1 1 0
1 1 0 1
输出 #1
2
题外话
考场上不要盲目地追求正解!先全部写完暴力(可以和正解对拍),再慢慢研究正解。不能在一题上耗费过多时间,其实有时候你辛辛苦苦写了个正解,某个地方写挂了,那还不如人家乱打的暴力.
之后会出一篇对拍程序的博客
思路
枚举每一个点作为所选正方形的左上角的点,然后枚举正方形边长,逐一判断。
优化
边长倒着枚举,min(n,m)作为上界(因为正方形边长最大就是min(n,m)),枚举到当前的最大边长(不是最优解即使符合条件也是无济于事)。
逐一进行判断,一旦找到0立刻将双重循环break。
假如可行(即这个边长的正方形符合条件)则:
- 直接将最优解替换(由于下界为当前最大边长)