分步时按前一步的结果分类
分步乘法要求「每一步的方法数与前面怎么选无关」。一旦某一步的方法数随前面而变,就在变化处按前面的结果分成几类,类内各步才重新是常数,最后把各类相加。
解题套路
逐个安排元素时,本来想写成 ,却发现第 步能选几种要看前面选了什么——这时不要硬乘,也不必推倒重来:
- 找到「方法数开始依赖前面」的那一步;
- 按前面的结果分成几类,使得每一类内部第 步的方法数是同一个常数;
- 每类内部照常分步相乘;
- 类间相加。
一个标准例子
三人站 级台阶、每级最多 人。先甲( 种)、再乙( 种),到丙就卡住了:丙能选几级要看甲乙是不是站在同一级。于是按这一点分两类:
- 甲乙同级:这样的 (甲, 乙) 有 种;那一级已满,丙只剩 级 ;
- 甲乙异级:这样的 (甲, 乙) 有 种;两级各只站一人,丙随意 。
合计 。
与「先算总数再减」的分工
同一道题往往两条路都通:分类是正面切,补集是反面挖。判据很简单——
- 依赖只有两三种情形(本例就两种) 分类,过程直白;
- 违规的情形只有一小撮、而无限制的总数一眼可得 用补集更省。
注意
- 分类轴要保证类内是常数,不是随便切一刀:切完仍然「有的 种有的 种」,等于没切。
- 各类的前几步方法数也要重新数(本例里「甲乙同级」只有 种,不是 ),这是最常见的漏算处。
学它之前先会
共 2 条前置、最深 2 层。
出现在以下题目中
共 2 道题考到本条。