第二章 枚举

1.概念

  • 枚举就是把所有可能的答案一一列举出来再加以判断,又称暴力枚举穷举

2.做题步骤

  1. 建立数学模型:可能的情况是什么?要枚举哪些要素?
  2. 减少枚举的空间:枚举的范围是什么?是所有的内容都需要枚举吗?
  3. 选择合适的枚举顺序:从前往后,还是从后往前进行枚举

3.常见题型

基础枚举

  • 数值枚举:遍历区间[1,n],筛选满足条件的数(如被3整除且名各位和为偶数)
  • 字符串枚举:遍历字符/字符串集合,匹配特定模式(如以指定字母开头且长度为偶数)。

组合枚举

  • 子集枚举:用位运算/递归枚举集合子集,筛选符合条件的子集(如元素和能被k整除)
  • 排列枚举:通过回溯生成全排列,筛选符合条件的排列(如无重复数字且能被指定数整除)。

算法结合

  • 枚举+贪心:枚举关键状态后应用贪心策略(如任务分配顺序枚举+贪心资源分配)。
  • 枚举+动态规划:枚举状态后用DP求解子问题(如背包容量枚举+DP计算最优解)。、

场景枚举

  • 生活场景:枚举活动组合,求解最大兼容活动数(如时间安排问题)。
  • 游戏场景:枚举移动方向,搜索迷宫路径(如BFS/DFS遍历方向)。