容斥原理
设\(S_1,S_2,...,S_n\)为\(n\)个有限集合,\(|S|\)代表集合\(S\)的大小,则有
\[\left | \bigcup_{i=1}^nS_i \right |=\sum_{i=1}^n|S_i|-\sum_{1\leq i \leq j \leq n}|S_i\cap S_j|+...+(-1)^{n+1}\left | \bigcap_{i=1}^nS_i \right |
\]
多重集组合数
容斥原理的一个重要运用就是计算多重集组合数。
设\(S=\{n_1*a_1,n_2*a_2,...,n_k*a_k\}\)是由\(n_1\)个\(a_1\),\(n_2\)个\(a_2\),\(...\),\(n_k\)个\(a_k\)组成的多重集。设\(n=\sum_{i=1}^kn_k\),则对于任意\(r\leq n\),从\(S\)中取出\(r\)个元素组成的多重集方案数为
\[C_{k-r-1}^{k-1}-\sum_{i=1}^kC_{k+r-n_i-2}^{k-1}+\sum_{1
\leq i\leq j\leq n}C_{k+r-n_i-n_j-3}^{k-1}-...+(-1)^kC_{k+r-\sum_{i=1}^k n_i-(k+1)}^{k-1}
\]
证明:
不考虑\(n_i\)的限制,从\(S\)中任选\(r\)个元素,相当于从多重集\(S=\{\infty*a_1,\infty*a_2,...,\infty*a_k\}\)取出\(r\)个元素,则由组合数的知识可得方案数为\(C_{k+r-1}^{k-1}\)。
设\(