二項式反演學習筆記
二項式反演似乎是個很有趣的東西~
二項式反演似乎有很多條。
第一條(最基本,最好記的一條):若序列 $f$ 和 $g$ 滿足:
$$g_n=\sum\limits^n_{i=0}(-1)^i{n\choose i}f_i$$
那麼
$$f_n=\sum\limits^n_{i=0}(-1)^i{n\choose i}g_i$$
反過來也成立。
證明:(公式恐懼症者可以跳過)
第一個式子代入第二個式子:
$$f_n=\sum\limits^n_{i=0}(-1)^i{n\choose i}\sum\limits^i_{j=0}(-1)^j{i\choose j}f_j$$
全部放到後面:
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{i+j}{n\choose i}{i\choose j}f_j$$
拆開:
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{i+j}\frac{n!}{i!(n-i)!}\frac{i!}{j!(i-j)!}f_j$$
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{i+j}\frac{n!}{(n-i)!j!(i-j)!}f_j$$
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{i+j}\frac{n!}{(n-j)!j!}\frac{(n-j)!}{(n-i)!(i-j)!}f_j$$
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{i+j}\frac{n!}{(n-j)!j!}\frac{(n-j)!}{(n-i)!((n-j)-(n-i))!}f_j$$
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{i+j}{n\choose j}{n-j\choose n-i}f_j$$
改變列舉順序:
$$f_n=\sum\limits^n_{j=0}\sum\limits^n_{i=j}(-1)^{i+j}{n\choose j}{n-j\choose n-i}f_j$$
跟 $i$ 無關的提出去:
$$f_n=\sum\limits^n_{j=0}(-1)^j{n\choose j}f_j\sum\limits^n_{i=j}(-1)^i{n-j\choose n-i}$$
列舉 $i$ 改為列舉 $i+j$:
$$f_n=\sum\limits^n_{j=0}(-1)^j{n\choose j}f_j\sum\limits^{n-j}_{i=0}(-1)^{i+j}{n-j\choose n-(i+j)}$$
$$f_n=\sum\limits^n_{j=0}(-1)^{2j}{n\choose j}f_j\sum\limits^{n-j}_{i=0}(-1)^i{n-j\choose n-j-i}$$
前面,$(-1)^{2j}$ 一定是 $1$,可以省略;後面,可以添上 $1^{n-j-i}$,式子不變。
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j\sum\limits^{n-j}_{i=0}(-1)^i1^{n-j-i}{n-j\choose n-j-i}$$
後面用二項式定理:
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j(-1+1)^{n-j}$$
根據 $0^n=[n=0]$:
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j[n=j]$$
有用的只有 $n=j$:
$$f_n={n\choose n}f_n$$
得證。(似乎網上沒有這個式子的證明,我仿照了別的證明才死磕出來的Q^Q)
然而這個式子不是很常用。
第二條(最常用的一條):若序列 $f$ 和 $g$ 滿足:
$$g_n=\sum^n_{i=0}{n\choose i}f_i$$
那麼
$$f_n=\sum^n_{i=0}(-1)^{n-i}{n\choose i}g_i$$
反過來也成立。
證明:(公式恐懼症者可以跳過)
第一個式子代入第二個式子:
$$f_n=\sum\limits^n_{i=0}(-1)^{n-i}{n\choose i}\sum\limits^i_{j=0}{i\choose j}f_j$$
全部放到後面:
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{n-i}{n\choose i}{i\choose j}f_j$$
拆開,同上可得:
$$f_n=\sum\limits^n_{i=0}\sum\limits^i_{j=0}(-1)^{n-i}{n\choose j}{n-j\choose n-i}f_j$$
改變列舉順序:
$$f_n=\sum\limits^n_{j=0}\sum\limits^n_{i=j}(-1)^{n-i}{n\choose j}{n-j\choose n-i}f_j$$
跟 $i$ 無關的提出去:
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j\sum\limits^n_{i=j}(-1)^{n-i}{n-j\choose n-i}$$
列舉 $i$ 改為列舉 $n-i$:
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j\sum\limits^{n-j}_{i=0}(-1)^i{n-j\choose i}$$
後面,可以添上 $1^{n-j-i}$,式子不變。
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j\sum\limits^{n-j}_{i=0}(-1)^i1^{n-j-i}{n-j\choose i}$$
後面用二項式定理:
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j(-1+1)^{n-j}$$
根據 $0^n=[n=0]$:
$$f_n=\sum\limits^n_{j=0}{n\choose j}f_j[n=j]$$
有用的只有 $n=j$:
$$f_n={n\choose n}f_n$$
得證。實際上上面這兩條和下面將提到的兩條證明過程都十分相似,我就不贅述了。
第三條(比較冷門的一條):若序列 $f$ 和 $g$ 滿足:
$$g_k=\sum^n_{i=k}(-1)^i{i\choose k}f_i$$
那麼
$$f_k=\sum^n_{i=k}(-1)^i{i\choose k}g_i$$
反過來也成立。
第四條(比較常用的一條):若序列 $f$ 和 $g$ 滿足:
$$g_k=\sum^n_{i=k}{i\choose k}f_i$$
那麼
$$f_k=\sum^n_{i=k}(-1)^{i-k}{i\choose k}g_i$$
反過來也成立。
二項式定理主要用來解決一些形如“恰好”的這類計數問題。通常恰好的方案數不好算,但是至多或者至少的方案比較好算,就可以用二項式反演。
那麼來幾道例題:
Color:UVAlive-7040 (題解 )
已經沒什麼好害怕的了:洛谷4859 ,BZOJ3622 (Todo)
(歡迎dalao們幫忙找更多的例題,謝謝OvO)