【学习笔记】错排问题

错排问题

题意

已知一个长度为 \(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})\)。递推即可。

\[\large{\mathbb{END}} \]

posted @ 2025-05-07 21:38  tyh_27  阅读(11)  评论(0)    收藏  举报  来源