二项式反演
题解:
https://www.cnblogs.com/cjyyb/p/10142878.html
$$f(i)=\sum\limits_{i=k}^{n} { C_n^i *g(i)} \tag 1$$
可以反演出
$$g(i)=\sum\limits_{i=k}^{n} {{(-1)}^{n-i}* C_{n}^{i}} \tag 2$$
具体证明只需要把2式的f用1式带入即可 懒得写了
例题1:错排
设$f(x)$为x个元素的全排列 $f(x)=x!$ $g(x)$为x个元素的错排
$$f(n)=\sum\limits_{i=0}^{n} { C_n^i *g(i) } $$
然后这个就是上面那个式子,于是可以反演出
$$g(n)=\sum\limits_{i=0}^{n} { {(-1)}^{n-i} * C_n^i * f(i) }$$
$$g(n)=n! * \sum\limits_{i=0}^{n} { \frac{{(-1)}^{i}} {i!} }$$
例题2:染色问题
有$1×n$的一排格子,有$m$种颜色,每个格子染一个颜色,相邻格子颜色不能相同,每种颜色都至少被用到$1$次,求染色方案数。
比较容易想到的是$f[i][j]$表示染前i个用了j种颜色的方案输
$f[i][j]=f[i-1][j-1]*(n-j+1)+f[i-1][j]*(j-1)$ 这样子是$nm$的
考虑一种更快的算法
这题直接容斥是没法做的,我们并不能算出至少有k个相邻位置相同的方案输
令$f(x)$表示用$<=x$种颜色,相邻不同 g(x)$表示正好用x种颜色,相邻不同
显然$f(m)=m!*{(m-1)}^{n-1}$
$$f(m)=\sum\limits_{i=1}^{m} { g(i)* C_m^i }$$
那么这个就可以反演了