枚举算法概述
- 定义:通过遍历所有可能的情况(或部分可能情况)来寻找答案的算法思想。
- 核心思想:将问题拆解为有限的状态集合,通过逐一检查找出满足条件或最优的方案。
- 常用用途:暴力搜索、最优值验证、组合生成、合法方案统计等。
- 思想:直接枚举所有可能的变量组合,逐一判断是否合法或计算结果。
- 常见形式: - 单层循环:枚举一个变量;
- 思想:朴素的循环嵌套枚举在枚举对象较多的情况下可能复杂度过高,循环嵌套的枚举如果是 $k$ 层循环, 那么对应的复杂度为 $O(n^k)$, 当题目中给出了一定的常数级别限制条件时,可以减少我们的循环的次数, 降低时间复杂度从而通过题目。 模板例题:公交换乘
- 场景:在二维矩阵中统计或判断所有子矩阵(如最大子矩阵和、满足条件的区域计数等)。
- 思路: 1. 枚举左上角坐标 $(x_1, y_1)$;
- 典型应用: - 最大子矩阵和问题;
- 场景:需要枚举所有子集或状态(常用于 $n \le 20$ 的问题)。
- 思想:用一个长度为 $n$ 的二进制数表示集合的选取状态。
---
一、朴素枚举
- 双层循环:枚举有序或无序对;
- 三层循环:枚举三元组、三角形、三人组等。
---
二、常数枚举
---
三、子矩阵枚举(二维枚举)
2. 枚举右下角坐标 $(x_2, y_2)$;
3. 计算该区域的结果或属性。
- 子矩阵计数问题;
- 最大平均子矩阵或满足条件的区域搜索。
---
四、二进制枚举(子集枚举)

【题目知识点分类】
01
【枚举】开关灯
入门
--
练习
03
n 钱买 n 鸡
入门
--
练习
04
初识暴力枚举
入门
--
练习
05
【模拟枚举】水仙花数
入门
--
练习
06
【穷举】鸡兔同笼
入门
--
练习
07
【穷举】找和为K的两个元素
入门
--
练习
08
冰淇淋
普及-
--
练习
09
最接近的分数
入门
--
练习
10
三正因子
入门
--
练习
11
[GESP202406 三级] 寻找倍数
普及-
--
练习
12
Mex
普及-
--
练习
13
[NOIP 2016 普及组] 回文日期
普及-
--
练习
14
寻找倍数
入门
--
练习
15
平衡矩阵计数问题
普及-
--
练习
16
减少荒地开垦
普及-
--
练习
17
[GESP202406 五级] 黑白格
普及/提高-
--
练习
18
三连击
入门
--
练习
19
轰炸
普及-
--
练习
20
[CSP-S 2023] 密码锁
普及/提高-
--
练习
21
[CSP-J 2019] 公交换乘
普及-
--
练习
22
PERKET
普及-
--
练习
23
[GESP202403 五级] B-smooth数
普及-
--
练习
24
Patting Heads S
普及/提高-
--
练习
25
二分图化
普及-
--
练习