题目描述

样例
input:
4 4
1 1 1 1
1 0 1 1
1 1 0 1
1 1 1 1
output:
3
input:
5 5
1 0 1 1 1
1 0 1 0 1
1 1 0 1 1
1 0 0 1 1
1 1 1 1 1
output:
3
题目大意
给定一个01矩阵,要求在里面找到一个子矩阵,满足:
1、这个矩阵的周围的一圈是1。
2、这个矩除了周围一圈,中间01数量之差最多为1。
3、这个矩阵至少为2*2。
求会有多少矩阵。
分析
数据范围是500,容易想到用 n 3 n^3 n3做法。
先来想最暴力的:
n 4 n^4 n4:枚举左上和右下端点,然后用一个矩阵的前缀和搞出里面的01之差,然后判断是否满足条件。枚举 n 4 n^4 n4,判断 O ( 1 ) O(1) O(1),总 O ( n 4 ) O(n^4) O(n4), T L E TLE TLE。那么怎么压掉一维?
接下来是官方的方式:
首先固定一个矩阵的上边界 i i i和下边界 j j

这篇博客介绍了如何解决一个关于01矩阵的问题——找到满足特定条件的子矩阵,包括暴力求解和利用前缀和优化的方法。博主通过分析数据范围,提出n^4的暴力算法会超时,并详细解释了官方的优化方案,利用前缀和和桶记录01差来提高效率。
最低0.47元/天 解锁文章

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



