zoukankan      html  css  js  c++  java
  • 二项式反演入门

    二项式反演入门

    写在前面

    前几天做CF的时候做了一道容斥,感觉很迷,不知道式子怎么推出来的

    昨天T3刚好又考了一道容斥 (爆 零 了),也是这种类型的(高维容斥),老师用二项式反演证了(%%%

    于是来学学二项式反演

    二项式定理

    比较基础的内容

    结论

    [(a+b)^n=sum_{i=0}^n C(n,i) a^{i} b^{n-i} ]

    证明

    对于单独一项,考虑组合意义,在 (n) 个不同的数对中选择 (i)(a) ,剩下的为 (b),方案数为(C(n,i))

    最后加起来就行了

    二项式反演

    结论

    [g(n) =sum_{i=1}^n C(n,i) f(i) Longleftrightarrow f(n)=sum_{i=1}^n -1^{n-i}C(n,i)g(i) ]

    证明

    先把左边带入右边

    [f(n)=sum_{i=1}^n -1^{n-i}C(n,i) sum _{k=1}^iC(i,k)f(k) ]

    右边式子改变枚举顺序:

    [f(n)=sum_{k=1}^n f(k)*sum_{i=k}^n -1^{n-i} C(n,i)C(i,k) ]

    即证明

    [f(n)=sum_{k=1}^n [k==n]*f(k) ]

    化简系数:

    [sum_{i=k}^n -1^{n-i} frac{n!}{i!(n-i)!}frac{i!}{k!(i-k)!} ]

    [=sum_{i=k}^n -1^{n-i} frac{n!}{(n-i)!(i-k)!k!} ]

    [=frac{n!}{k!} sum_{i=k}^n frac{-1^{n-i}}{(n-i)!(i-k)!} ]

    乘上((n-k)!)

    [=frac{n!}{k!(n-k)!} sum_{i=k}^n -1^{n-i}frac{(n-k)!}{(n-i)!(i-k)!} ]

    [=C(n,k)*sum_{i=k}^n -1^{n-i} C(n-k,n-i) ]

    即证明

    [C(i,k)*sum_{i=k}^n -1^{n-i} C(n-k,n-i) = [i==k] ]

    1. (n=k)

      原式等于

      [C(k,k)*-1^{0}*C(0,0) = 1 ]

    2. (n ot = k)

      此时有(sum_{i=k}^n -1^{n-i} C(n-k,n-i)=0)

      证明:

      1. (n-k)为奇数

        也就是(n-i)(n-i+1)个取值,偶数个

        对于(C(n-k,n-i))(C(n-k,n-k-(n-i))) 的系数相反,两两消掉了

      2. (n-k)为偶数

        运用二项式定理:

        [sum_{i=0}^n C(n,i) (-1)^{n-i} = sum_{i=0}^n C(n,i) (-1)^{n-i}1^i ]

        [=(1-1)^n=0^n=0 ]

    原式得证

    第二种形式

    [g(n)=sum_{i=1}^n -1^i*C(n,i)*f(i) Longleftrightarrow f(n)=sum_{i=1}^n -1^i*C(n,i)*g(i) ]

    感性理解,

    因为进行了容斥,g(n)相当于f的对立面,用g来算f也就等价了

    例题分析

    二项式反演的例题一般是用容易得到的式子表示答案的sigma形式

    可以推很多容斥式子QwQ

    错排问题

    (f(i)) 表示有i个数不在位置上,(g(i))表示所有排列方法

    那么有

    [g(n)=sum_{i=0}^n C(n,i)f(i) ]

    [f(n)=sum_{i=0}^n -1^{n-i}C(n,i)g(i) ]

    化成好康的形式:

    [=sum_{i=0}^n -1^{n-i}frac{n!}{(n-i)!} ]

    提出相同项,改变枚举顺序:

    [=n!sum_{i=0}^n frac{-1^i}{i!} ]

    球染色

    一个n个求,k种颜色,相邻球的颜色不同,每种颜色至少出现一次

    考虑(g(x))为不要求至少出现一次的方案数,即为(k*(k-1)^{n-1})

    (f(i))表示恰好使用(i)种颜色

    所以有

    [g(k)=k*(k-1)^{n-1}=sum_{i=1}^k C(k,i) f(i) ]

    [f(k)=sum_{i=1}^k-1^{k-i}C(i,k)g(i) ]

    [=sum_{i=1}^k (-1)^{k-i}C(k,i)*i(i-1)^{n-1} ]

    染色问题

    这题就不知道高到哪里去了

    网上的题解咋都是显然易得啊

    有三个限制:

    1. 棋盘的每一行至少有一个小方格被染色。

    2. 棋盘的每一列至少有一个小方格被染色。

    3. 每种颜色都在棋盘上出现至少一次。

    注意每个格子可以不染色,所以可用颜色为(k+1)

    设其方案数为(f(i,j,k))

    考虑用最多(i) 行,(j) 列,(k) 种颜色,方案数即为(g(i,j,k)=(k+1)^{ij})

    那么有

    [g(n,m,c)=sum_{i=1}^nsum_{j=1}^msum_{k=1}^c C(n,i)*C(m,j)*C(c,k)*f(i,j,k) ]

    可以得到

    [f(n,m,c)=sum_{i=1}^nsum_{j=1}^msum_{k=1}^c -1^{n-i+m-j+k-c}C(n,i)*C(m,j)*C(c,k)*g(i,j,k) ]

    [f(n,m,c)=sum_{i=1}^nsum_{j=1}^msum_{k=1}^c -1^{n-i+m-j+k-c}C(n,i)*C(m,j)*C(c,k)(k+1)^{ij} ]

    枚举是(n^3)的,可以通过

    注意到有幂次有sigma有组合数,用二项式定理化简:

    [=sum_{i=1}^nsum_{k=1}^csum_{j=1}^m -1^{n-i+m-j+k-c}C(n,i)*C(m,j)*C(c,k)(k+1)^{ij} ]

    [=sum_{i=1}^nsum_{k=1}^c-1^{n-i+c-k}C(n,i)*C(c,k)sum_{j=1}^m C(m,j)*-1^{m-j}(k+1)^{ij} ]

    [=sum_{i=1}^nsum_{k=1}^c-1^{n-i+c-k}C(n,i)*C(c,k)*left((k+1)^i-1 ight)^m ]

    CF1228E

    (n*n)的矩阵,每个格子可以填1~k的数。要求使得每行每列的数字最小值都为1(至少有一个1),问有多少种填数方案

    跟上一题的区别不就是一个对于每种颜色都有限制,一个只对一种颜色有限制吗?

    考虑有 (i)(j) 列对于1没有限制,方案数为

    [g(i,j)=k^{n i+n j-i j} (k-1)^{n^{2}-n i-n j+i j} ]

    [g(n,n)=sum_{i=0}^n sum _{j=0}^n C(n,i)*C(n,j)*f(i,j) ]

    那么

    [f(n,n)=sum_{i=0}^n sum _{j=0}^n -1^{n-i+n-j}C(n,i)*C(n,j)*k^{n i+n j-i j} (k-1)^{n^{2}-n i-n j+i j} ]

    好像可以用二项式定理化简吧。。。

    [f(n,n)=sum_{i=0}^n -1^{n-i}C(n,i)sum _{j=0}^n C(n,j)*-1^{n-j}*k^{n i+n j-i j} (k-1)^{n^{2}-n i-n j+i j} ]

    之后懒得写了,应该差不多

  • 相关阅读:
    【ZJ选讲·压缩】
    【ZJ选讲·调整】
    【ZJ选讲·钻石游戏】
    【ZJ选讲·BZOJ 5073】
    【ZJ选讲·BZOJ 5071】
    【模拟赛·polyline】
    【BZOJ 2744 朋友圈】
    【BZOJ 2241 打地鼠】
    【CF edu 30 D. Merge Sort】
    【CF edu 30 C. Strange Game On Matrix】
  • 原文地址:https://www.cnblogs.com/lcyfrog/p/11772757.html
Copyright © 2011-2022 走看看