计数问题问的是“有多少种可能”。这句话看起来简单,真正难的地方不在公式本身,而在于先把“可能”说清楚:一个结果到底由哪些选择组成,两个看起来不同的记录是否算同一个结果,某个对象能不能被重复使用。
本章先建立两个基本原则:加法原理和乘法原理。接着用树状选择把计数过程画出来,再进入排列、组合、重复选择和二项式系数。学完以后,你应能在看到题目时先判断模型,而不是先搜索某个熟悉公式。
计数不是把所有结果都列出来才算严谨。好的计数方法会建立一个清楚的对应:每个合法结果被数一次,且只被数一次。
很多计数错误不是算术错,而是对象没有定清楚。开始套公式前,先问三个问题。
第一个问题是:这些选择是否互斥?如果一个结果只能落入某一类,通常用加法;如果一个结果由多个连续步骤组成,通常用乘法。
第二个问题是:顺序是否重要?同样选出甲、乙、丙三个人,若要安排第一名、第二名、第三名,顺序重要;若只是组成一个三人小组,顺序不重要。
第三个问题是:是否允许重复?三位数字密码通常允许同一个数字重复出现;从班级里选三名代表通常不允许同一个人被选两次。

不要把“抽出来的动作有先后”误认为“结果的顺序重要”。若题目只问“选出哪几个人”,哪怕你在草稿上一个一个选,最终结果仍然是无序集合。
下面的交互可以练习这个分类过程。先读题意,再选择顺序与重复条件,观察公式为什么随条件改变。
加法原理处理“分情况选择”。如果事件可以分成互不重叠的几类,且每个结果只属于其中一类,那么总数就是各类数量相加。
若集合 和 不相交,则
例如,某课程作业可以选择“写证明题”或“做建模题”,两类不能同时选。若证明题有 4 道可选,建模题有 3 道可选,那么共有 种选法。
乘法原理处理“连续步骤”。如果一个结果由第一步和第二步共同决定,第一步有 种选择,且每一种第一步之后第二步都有 种选择,那么总数是
例如,主食有 3 种,饮品有 2 种,一份套餐由一个主食和一个饮品组成,那么共有 种套餐。

实际题目常常同时使用两种原则。先按互斥情况分类,再在每一类中用乘法数清楚。
例如,一个 3 位密码由数字组成。第一位不能是 0。若密码必须是偶数,最后一位只能是 。这里可以按最后一位是否为 0 分情况。
若最后一位是 ,第一位可以从 到 中选,有 种;中间一位可以从 到 中选,有 种。因此这一类有 种。
如果几个类别有重叠,不能直接相加。比如“喜欢数学的人数”和“喜欢计算机的人数”可能包含同一批人。重叠计数会在下一章用容斥原理专门处理。
树状选择把乘法原理画成路径。每一层表示一步选择;从根走到叶子的一条完整路径表示一个最终结果。
如果每个第一层分支下面都有同样数量的第二层分支,叶子数就是分支数相乘。如果不同分支下面的选择数不一样,可以先数每个大分支的叶子,再把它们相加。

树状图特别适合检查两个问题:有没有漏掉某一类分支,某个结果有没有被不同路径重复到达。只要路径和结果是一一对应的,叶子数就是结果数。
下面的交互允许你改变每一层的分支数。连续选择对应乘法;互斥选择对应加法。把树改成非均匀分支时,注意不要强行套一个单一乘积。
某图书馆给阅览区编号。第一位表示楼层,有 种;第二位表示区域,每层有 种;第三位表示书架,每个区域有 个书架。问这样的路径码有多少种。
一个路径码由三步选择共同决定:楼层、区域、书架。题目不是让我们在三类对象中任选一种,而是每个结果都必须包含三步。
每一步选择数分别是 。同一楼层下区域数相同,同一区域下书架数也相同,所以可以直接使用乘法原理。
路径码总数为
排列处理的是“给位置依次放对象”。如果从 个不同对象中选出 个放入 个有序位置,且每个对象最多用一次,那么第一位有 种选择,第二位剩 种,依次类推。
这类数记作 :
也可以写成阶乘形式:
当 时,就是把 个对象全部排成一列,共有
种排列。

有 8 名同学报名分享,课堂上只安排 3 个发言位置:第一位、第二位、第三位。同一名同学不能重复发言。问共有多少种安排。
先判断顺序是否重要。第一位发言和第三位发言不是同一个安排,所以顺序重要。
再判断是否允许重复。同一名同学不能重复发言,所以是不重复排列。
三个位置依次有 种选择,因此共有
排列公式不是额外记忆出来的。它只是乘法原理在“不放回、有序槽位”场景中的简写。
组合处理的是“选出一个小组”。如果从 个不同对象中选出 个,且顺序不重要,那么每个 人小组在排列中被数了 次。于是组合数为
也就是
读作“ 选 ”。它也常写作 。本章以后主要使用 ,因为它和二项式系数的写法一致。

一个班有 10 名同学,要选出 4 名组成项目小组,不设组长。问有多少种小组。
先判断顺序是否重要。题目只关心小组成员是谁,不关心谁先被选中,所以顺序不重要。
如果先按顺序选 4 人,会得到 种有序结果。但同一个 4 人小组内部可以排成 种顺序。
组合数有一个很常用的对称性:
它的组合解释很直接:从 个对象中选出 个留下,等价于选出 个不留下。选中的集合确定了没选中的集合,反过来也一样。
看到 时,不要只把它看成公式。它通常表示“从 个位置、对象或步骤中挑出 个”的选择。
“是否允许重复”会改变每一步的选择数。最常见的四种模型可以按两个问题分类:顺序是否重要,是否允许重复。

最后一类叫可重复组合。一个直观模型是“隔板法”:要从 类物品中共选 个,可以用 个星号表示被选物品,用 个隔板分开类别。于是问题变成:在 个位置中选出 个位置放星号。
所以可重复组合数为
冰淇淋店有 5 种口味,要选 3 球,可以重复选择同一种口味,且三球放入杯中不区分先后。问有多少种选择。
顺序不重要。草莓、巧克力、草莓和草莓、草莓、巧克力表示同一种杯中组合。
允许重复。同一种口味可以选多球,所以不能使用普通组合 。
“可重复组合”只适用于同类物品可重复、并且最终顺序不重要的场景。若三球按第一球、第二球、第三球记录,就应使用 。
组合数 又叫二项式系数。它之所以反复出现,是因为很多不同问题都能转化为“从 个位置中选 个位置”。

下面是几个常见解释。
从 个对象中选 个,数量是 。
长度为 的二值序列中,恰好有 个位置填入某个标记,数量也是 。
从 的 个因子中,选择哪 个因子贡献 ,其余因子贡献 ,数量仍是 。
在只能向右和向上走的网格路径中,如果总共走 步,其中 步向上,那么路径数是 。
组合解释可以用来证明恒等式。例如:
不是因为阶乘公式化简后碰巧相等,而是因为“选出 个留下”和“选出 个不留下”描述的是同一批选择,只是从相反角度记录。
再看 Pascal 恒等式:
它可以这样解释:从 个对象中选 个,固定看某个特殊对象甲。合法选择分成两类:包含甲,或者不包含甲。
若选择包含甲,则还要从其余 个对象中选 个,有 种。
二项式定理说,对任意非负整数 ,
为什么系数是 ?把 看成 个因子的乘积:
展开时,每一项都来自每个因子中选 或选 。如果某一项含有 个 ,就必须从 个因子中选出 个因子贡献 ,其余因子贡献 。这种选法有 种,所以 的系数就是 。

Pascal 三角从第 行开始:
每个内部数等于它左上方和右上方两个数之和。这正是 Pascal 恒等式的数值版本。
下面的交互可以选择 和 ,观察 在 Pascal 三角、组合解释和二项式展开中的同一个位置。
求 中 的系数。
把表达式看成 ,其中 ,。一般项是
计数题最容易出现的错误,通常可以归到以下几类。
把有序结果当成无序结果。比如安排三个人坐三个座位是排列,不是组合。
把无序结果当成有序结果。比如选三名委员时,甲乙丙和丙乙甲是同一个小组。
忽略重复限制。密码、抽牌、选人、选口味的规则不同,同一个对象能否再次出现必须由题目决定。
把重叠类别直接相加。若两个条件可能同时满足,直接相加会重复计数。
把公式当作判断依据。正确顺序应是先判断对象,再选择公式。
一个可靠的计数解法通常能回答两句话:我数的对象是什么?为什么每个对象恰好被数一次?
顺序不重要,且同一名同学不能重复选择,所以是普通组合:
三个职位不同,顺序或角色重要,且不能重复,所以是不重复排列:
顺序重要,允许重复。每位有 10 种选择,共有
种。
顺序不重要,允许重复,是可重复组合:
一般项为
要得到 ,需要 ,所以 。系数为
本章的核心不是背下四个公式,而是建立计数判断的顺序。先判断结果对象,再看是互斥分类还是连续步骤;再判断顺序是否重要、是否允许重复;最后才选择排列、组合或二项式系数。
下一章会处理本章刻意避开的两类问题:类别之间有重叠时怎样避免重复计数,以及在有限位置中放入足够多对象时为什么必然出现重复。
若最后一位是 中的一个,最后一位有 种;第一位仍有 种;中间一位有 种。因此这一类有 种。
两类互斥,所以总数为
这一步用的是加法原理。
每个结果都对应树上一条从根到叶的路径。
种安排。
因此小组数为
| 顺序不重要,不允许重复 | 从 个对象中选 个 |
| 顺序不重要,允许重复 | 从 类物品中选 个,可多次选同类 |
使用可重复组合,令 ,得到
若选择不包含甲,则要从其余 个对象中直接选 个,有 种。
两类互斥,且覆盖所有 个对象的选择。所以总数为
这就得到 Pascal 恒等式。
要得到 ,需要 中的指数满足 ,所以 。
代入 ,系数为