组合数学
1.1 可重复组合
\(n\)个数中选择\(r\)个数,每个数可以重复选择多次。
方案数为\(\binom{n + r - 1}{r}\)。
考虑若没有选择多次的条件,就是在\(n\)个数中选择一个子数列,满足\(a_i < a_{i + 1}\),现在有了可以重复选择的条件,也就是说我们选择的子数列变成了\(a_i <= a_{i + 1}\),那么我们考虑如何将其变成\(a_i < a_{i + 1}\)的形式,只需将这个子数列从小到大排序,使\(a_i + i - 1\)即可。
那么此时的方案数是\(\binom{n + r - 1}{r}\),感性理解一下就是从\(n + r - 1\)个数中选择\(r\)个数,那么按照\(a_i + i - 1\)的规则减回去,发现最大的数最大是\(n\),最小的数是\(1\),正好满足原来的条件。
接着考虑一个问题,如果依旧是是从\(n\)个数中选择\(r\)个数,不能选择相邻的数,每一个数只能选择一次的方案数。
那么此时选择的子数列就是\(a_i + 1 < a_{i + 1}\)的形式,我们考虑将它变成\(a_i < a_{i + 1}\)的形式,只需移项即可,得到\(a_i < a_{i + 1} - 1\)。那么现在数列中最大的数也就是\(n - r + 1\)了,方案数也就是\(\binom{n - r + 1}{r}\)。