【学习笔记】错排问题
错排问题
题意
已知一个长度为 \(n\) 的排列 \(p_1,p_2,\dots,p_n\)。求 \(\forall i \in [1,n]\text{ s.t. }p_i \ne i\) 的方案数。
法1
考虑容斥原理。
因为容斥求的是并集(\(\cup\))但这里求的是交集(\(\cap\)),因此可以将它的补集求出来,再将总数减去方案数即可。
设有 \(n\) 个集合 \(A_i=\{P\mid p_i=i\}\),即 \(|A_i|\) 表示存在 \(p_i=i\) 的方案数。
而答案就是将所有 \(|A_i|\) 求和,再减去两个 \(A_i\) 交起来,在加上三个 \(A_i\) 交起来,等等。
则有方案数为 \(D_n=\sum\limits_{i=1}^{n}(-1)^{i-1}\cdot \binom{n}{i}\cdot(n-i)!\),其中 \(i\) 表示有 \(i\) 处的 \(p_i\) 满足 \(p_i=i\),\(\binom{n}{i}\) 表示选出 \(i\) 处的方案数,\((n-i)!\) 表示剩下 \(n-i\) 处地方可以满足的方案数。
所以答案就是 \(n!-D_n\),可以写作 \(\sum\limits_{i=0}^{n}(-1)^{i-1}\cdot \binom{n}{i}\cdot(n-i)\)。
法2
因为 \(p_n\ne n\),所以 \(p_n\) 有\(n-1\) 中取法。
我们设 \(p_n=i\),那么对于 \(p_i\) 来说,\(p_i=\begin{cases}n\\\ne n \end{cases}\),两种情况。
-
情况一:若 \(p_i=n\),那么相当于将 \(i\) 与 \(n\) 交换,方案数为 \(D_{n-2}\)。
-
情况二:若 \(p_i \ne n\),实际上也就是 \(D_{n-1}\) 种情况。
所以 \(D_n=(n-1)\cdot (D_{n-2}+D_{n-1})\)。递推即可。

浙公网安备 33010602011771号