zoukankan      html  css  js  c++  java
  • 二项式反演基础

    二项式反演

    (g_n=sumlimits_{i=0}^n(-1)^idisplaystyleinom{n}{i}f_iquad↔quad f_n=sumlimits_{i=0}^n(-1)^idisplaystyleinom{n}{i}g_i)

    证明:

    [egin{align} &sumlimits_{i=0}^n(-1)^iinom{n}{i}g_i\ =&sum_{i=0}^n(-1)^iinom{n}{i}sum_{j=0}^i(-1)^jinom{i}{j}f_j\ =&sum_{i=0}^nsum_{j=0}^i(-1)^{i}(-1)^jfrac{n!}{i!(n-i)!}·frac{i!}{j!(i-j!)}f_j\ =&sum_{i=0}^nsum_{j=0}^i(-1)^{i}(-1)^jfrac{n!}{(n-i)!j!(i-j!)}f_j\ =&sum_{i=0}^nsum_{j=0}^i(-1)^{i}(-1)^jfrac{n!(n-j)!}{(n-j)!(n-i)!j!(i-j!)}f_j\ =&sum_{i=0}^nsum_{j=0}^i(-1)^{i}(-1)^jfrac{n!}{(n-j)!j!}·frac{(n-j)!}{(n-i)!(i-j!)}f_j\ =&sum_{i=0}^nsum_{j=0}^i(-1)^{i}(-1)^jinom{n}{j}·inom{n-j}{i-j}f_j\ =&sum_{j=0}^n(-1)^jinom{n}{j}f_jsum_{i=j}^n(-1)^iinom{n-j}{i-j}\ &i←i-j\ =&sum_{j=0}^n(-1)^jinom{n}{j}f_jsum_{i=0}^{n-j}(-1)^{i+j}inom{n-j}{i}\ =&sum_{j=0}^nf_jinom{n}{j}sum_{i=0}^{n-j}(-1)^{i}inom{n-j}{i}\ =&sum_{j=0}^nf_jinom{n}{j}[n==j]\ =&f_n end{align} ]

    倒数第二步可以把后面那一坨变为 ((1-1)^{n-j}) 显然等价于 ([n==j])

    于是就有

    [f_n=sum_{i=0}^ninom{n}{i}g_iquad↔quad g_n=sum_{i=0}^n(-1)^{n-i}inom{n}{i}f_i ]

    可以令 (G_n=(-1)^ng_n) 再带入最上面的式子,就有了一样的形式了。


    应用

    假设要求计数 恰好 (k) 个某物的方案数,(1leq kleq n)

    1.我们令 (g_i) 表示 恰好 (i) 个某物的方案数,(f_i)至多 (i) 个某物的方案数。

    这个满足 (f_k=sumlimits_{i=0}^kdisplaystyleinom{k}{i}g_i) ,假设我们能求出 (f_{0,1,2,..k}) ,就可以用二项式反演求回 $ g_k=sum_{i=0}k(-1){k-i}displaystyleinom{k}{i}f_i $了。

    2.我们令 (g_i) 表示 恰好 (i) 个某物的方案数,(f_i)至少 (i) 个某物的方案数。

    这个满足 (f_k=sumlimits_{i=k}^ndisplaystyleinom{i}{k}g_iquad ↔quad g_k=sumlimits_{i=k}^n(-1)^{i-k}displaystyleinom{i}{k}f_i)

    不会证,所以暴力拆开。

    [egin{align} &sum_{i=k}^ninom{i}{k}g_i\ =&sum_{i=k}^ninom{i}{k}sum_{j=i}^n(-1)^{j-i}inom{j}{i}f_j\ =&sum_{i=k}^nsum_{j=i}^ninom{j}{i}inom{i}{k}(-1)^{j-i}f_j\ =&sum_{i=k}^nsum_{j=i}^ninom{j}{k}inom{j-k}{i-k}(-1)^{j-i}f_j\ =&sum_{j=k}^nf_jsum_{i=k}^j(-1)^{j-i}inom{j}{k}inom{j-k}{i-k}\ &i←i-k\ =&sum_{j=k}^nf_jinom{j}{k}sum_{i=0}^{j-k}(-1)^{j-k-i}inom{j-k}{i}\ =&sum_{j=k}^nf_jinom{j}{k}[j==k]\ =&f_k end{align} ]

    于是也可以先求出 (f_{0,1,2...k}) 再二项式反演回 (g_k) 了。

    这个貌似就是广义容斥,把求恰好的问题转化为求至多,至少的问题。

    例题

    [post cid="969" cover="http://"/]

    个人博客地址: www.moyujiang.com 或 moyujiang.top
  • 相关阅读:
    IBM Minus One(water)
    约瑟夫问题的循环链表实现
    双向链表(差不多)
    单向链表的建立,插入,删除(复习一下)
    找新朋友(欧拉函数)
    验证角谷猜想(hd1279)
    Wolf and Rabbit(gcd)
    Big Number(大数)
    字串数(高精度组合数)
    寻找素数对(hd1262)
  • 原文地址:https://www.cnblogs.com/moyujiang/p/14906379.html
Copyright © 2011-2022 走看看