侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

最大空方阵

Allen Best
2022-04-08 / 0 评论 / 1 点赞 / 152 阅读 / 560 字
温馨提示:
本文最后更新于 2022-04-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

题目描述
给定 n×n 个字符,每个字符只能是 0 或 1,请从中找到一个完全由 0 构成的正方形区域,且正方形的边长达到最大。

输入格式
第一行:单个整数表示 nn;
接下来有n×n 个字符,表示给定的字符方阵,只由 0 及 1 构成。

输出格式
单个整数:表示只由 0 构成的最大方阵边长。

数据范围
对于 30% 的数据,1≤n≤50;
对于 60% 的数据,1≤n≤500;
对于 100% 的数据,1≤n≤3000。
样例数据
输入:
5
11111
10000
10000
00000
11111
输出:
3
输入:
2
11
11
输出:
0

题解:

假设dp[i][j]表示以 (i,j) 为右下角,且只包含 0 的正方形的边长最大值。
map[i][j] 存储地图数据:
若map[i][j]==1,,则 dp[i][j] = 0,因为当前位置不可能在由 0 组成的正方形中;
若map[i][j]==0,则 dp[i][j] 的值由其上方、左方和左上方的三个相邻位置的 dp 值决定。具体而言,当前位置的元素值等于三个相邻的元素中的最小值加 1,状态转移方程如下:
dp[i][j]=1+min(dp[i−1][j−1],dp[i][j−1],dp[i−1][j]);
此外,还需要考虑边界条件。如果 i 和 j 中至少有一个为 0,则以位置 (i, j)(i,j) 为右下角的最大正方形的边长只能是 1,因此 dp[i][j]=1。
时间复杂度:O(n^2)

0

评论区