我们用 f[i][j] 表示以 (i, j) 为右下角的正方形的最大边长,那么除此定义之外,f[i][j] = x 也表示以 (i, j) 为右下角的正方形的数目为 x(即边长为 1, 2, …, x 的正方形各一个)。在计算出所有的 f[i][j] 后,我们将它们进行累加,就可以得到矩阵中正方形的数目。
我们尝试挖掘 f[i][j] 与相邻位置的关系来计算出 f[i][j] 的值。

如上图所示,若对于位置 (i, j) 有 f[i][j] = 4,我们将以 (i, j) 为右下角、边长为 4 的正方形涂上色,可以发现其左侧位置 (i, j - 1),上方位置 (i - 1, j) 和左上位置 (i - 1, j - 1) 均可以作为一个边长为 4 - 1 = 3 的正方形的右下角。也就是说,这些位置的的 f 值至少为 3,即:
f[i][j - 1
该博客介绍了如何统计矩阵中全为1的正方形子矩阵的数量。通过定义 f[i][j] 表示以 (i, j) 为右下角的正方形最大边长,利用相邻位置的关系建立递推式,最终求得矩阵中正方形的总数。文章详细讲解了递推关系的推导过程,并考虑了边界和元素为0的情况。"
123185862,7652995,支付宝小程序框架详解与安全防护,"['小程序', '前端开发', '框架分析']
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



