算法学习记录:P1387 最大正方形
题目链接
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个点进行枚举,待补
本文来自博客园,作者:想个昵称好难ABCD,转载请注明原文链接:https://www.cnblogs.com/ClockParadox43/p/17418291.html