算法学习记录:P1387 最大正方形

发布时间 2023-05-21 10:33:35作者: 想个昵称好难ABCD

题目链接

https://www.luogu.com.cn/problem/P1387

解题思路

固定左上角的点,枚举所有边长即可。

随记:

昨天脑子特乱,下标,越界什么的都没想好就开始写了,因为思路不清晰时写的,写出来的代码,调bug都不知道怎么调,
对自己写的东西不够理解,在哪打印输出也不知道(循环一多自己就乱了),一个bug差不多调了快一天,今天理顺再战,一下子就过了。
很简单的题qwq。
以后写代码思路一定要清晰,尤其是边界,一定要想好。自己的代码每一步做了什么也要理顺!

AC代码

#include <iostream>
#include <math.h>
using namespace std;

const int N = 105;
int n, m, maxn;
int w[N][N];

int main()
{
	cin >> n >> m;
	
	for (int i = 1; i <= n; ++ i)
	    for (int j = 1; j <= m; ++ j)
	        cin >> w[i][j];

	int len = min(n, m);
	for (int i = 1; i <= n; ++ i)
		for (int j = 1; j <= m; ++ j)
			for (int k = 0; k <= len; ++ k)
			{
				if (i + k > len && j + k > len) break;
		
				bool flag = true;
				int cnt = 0;
				for (int r = i; r <= i + k; ++ r)	
				{
					if (!flag) break;
					for (int c = j; c <= j + k; ++ c)
					{
						if (w[r][c]) cnt ++ ;
						else {
							flag = false;
							break;
						}
					}
				}

				if (!flag) cnt = 0;
				maxn = max(cnt, maxn);
			}
	cout << sqrt(maxn);
        return 0;
}

思路2

固定2个点进行枚举,待补