前言
错排公式,即把n本可区分书打乱使得每本书不在原本位置的方案数。
容斥原理得到的递推式
我在某题题解里讲过,现在复制过来。
设dp[i]表示i个元素的错排方案数。
什么意思呢?就是关于i的排列其中不存在任意的a[j]=j。
我们可以使用容斥原理:
例如dp[n],其实就是要满足n个条件——第i个条件为a[i]!=i
那么合法方案数=至少不满足0个条件-至少不满足1个条件+至少不满足2个条件-至少不满足3个条件+……
也就是
dp[n]=∑ni=0(−1)i∗Cin∗(n−i)!
dp[n]=∑ni=0(−1)i∗n!i!∗(n−i)!∗(n−i)!
dp[n]=∑ni=0(−1)i∗n!i!
dp[n]=(−1)n+∑n−1i=0(−1)i∗n!i!
dp[n]=(−1)n+n∗∑n−1i=0(−1)i∗(n−1)!i!
dp[n]=(−1)n+n∗dp[n−1]
另一种递推式
如果i到了j,我们就让i向j连一条有向边。
合法的方案便是形成许多环且没有自环。
考虑dp[n],有两种可能。
在n-1的图上,n随便连一条有向边到一个结点,然后连向这个结点的结点改为连向n。相当于把n并进了这个环。n可以连向的结点有n-1种可能。
在n-2的图上,增加一个大小为2的环,除了n以外另一个点的编号未知,有n-1种可能。
于是错排公式有了另一种递推式
dp[n]=(n−1)∗(dp[n−1]+dp[n−2])