zoukankan      html  css  js  c++  java
  • [学习笔记] 各种反演

    1. 二项式反演

    1.1. 公式

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

    [f(n)=sum_{i=m}^n inom{n}{i}g(i)Leftrightarrow g(n)=sum_{i=m}^n (-1)^{n-i}inom{n}{i}f(i) ]

    [f(n)=sum_{i=n}^m inom{i}{n}g(i)Leftrightarrow g(n)=sum_{i=n}^m (-1)^{i- n}inom{i}{n}f(i) ]

    1.2. 一些题

    例 1. ( ext{[NOI Online #2] })游戏

    考虑 "钦定 (k) 次非平局" 枚举到的 "恰好 (k') 次非平局" 满足 (k’>k),我们考虑用第三个反演:设 (f(n)) 为钦定 (n) 次非平局的方案数,(g(n)) 为恰好 (n) 次非平局的方案数。

    对于 (f(n)) 的求法,令 (dp_{i,j}) 为在 (i) 的子树内钦定 (j) 次非平局的方案数。用树型背包转移(之前在博客证明过)是 (mathcal O(n^2)) 的。注意还要做 (i) 和子树内未匹配点的匹配。

    例 2. ( ext{[JSOI 2015] })染色问题

    套路地设 (f(x,y,k)) 为有 (x)(y) 列至少一个被染,有 (k) 种颜色至少染了一个格子方案数,(g(x,y,k)) 就是恰好。然而 (f(x,y,k)) 非常难算,因为行和列是会相互影响的,这给我们单纯枚举某行某列格子被染带来了困扰。

    然后我继续尝试,设 (f(x,y,k)) 为至少有 (x)(y) 列一个都没被染,有 (k) 种颜色至少染了一个格子方案数,(g(x,y,k)) 同理。那么((c+1) 是把不填也当作一种颜色),

    [f(x,y,k)=inom{n}{x}inom{m}{y}inom{c}{k} (c+1)^{(n-x)(m-y)-k}cdotprod_{i=1}^k left((n-x)(m-y)-i+1 ight) ]

    具体意义就是将选定 (k) 种颜色先染一个格子,再让剩下的格子随便乱选。燃鹅,这个式子会算重。

    不过可以考虑另外两种定义:设 (f(x,y,k)) 为至少有 (x)(y) 列一个都没被染,有 (k) 种颜色 至多/没被 染了一个格子方案数,(g(x,y,k)) 同理。

    对于至多,

    [f(x,y,k)=inom{n}{x}inom{m}{y}inom{c}{k} (k+1)^{(n-x)(m-y)} ]

    没被染,

    [f(x,y,k)=inom{n}{x}inom{m}{y}inom{c}{k} (c-k+1)^{(n-x)(m-y)} ]

    这两个式子最后反出来是一样的。

    注:至多有 (x)(y) 列被染也是可行的。


    ( ext{Update})

    发现自己完全没学懂… 其实 "有 (k) 种颜色至少染了一个格子" 的构造的本质问题不是算重,正常情况下甚至算重是被要求的。

    先看看多步容斥:

    [|A_1cup A_2cup...cup A_n|=sumlimits_{1le ile n}|A_i|-sumlimits_{1le i<jle n}|A_icap A_j|+...+(-1)^{n-1} imes |A_1cap A_2cap ...cap A_n| ]

    (A_i) 表示满足条件 (i) 的元素集合,最终求得的结果只能是 "至少满足一个条件的元素集合" 或 "一个条件都不满足的元素集合"。

    多数时候我们要求的是 "满足所有条件的元素集合",所以需要用到一个性质 —— 集合的并等于补集的交的补集。

    [|A_1^ccap A_2^ccap ...cap A_n^c|=|S|-sumlimits_{1le ile n}|A_i|+sumlimits_{1le i<jle n}|A_icap A_j|-...+(-1)^n imes |A_1cap A_2cap ...cap A_n| ]

    [|A_1cap A_2cap ...cap A_n|=|S|-sumlimits_{1le ile n}|A_i^c|+sumlimits_{1le i<jle n}|A_i^ccap A_j^c|-...+(-1)^n imes |A_1^ccap A_2^ccap ...cap A_n^c| ]

    对于这道题,我们可以选择计算 "恰好 (k) 种颜色至少染了一个格子" 或 "恰好 (k) 种颜色一个格子也没染"。由于要取补,选择计算第一个。设 (A_i) 为第 (i) 种颜色一个格子也没染的元素集合,这里的 "元素" 就是一种染色方案,显然在选取的过程中会算重,但是只要按公式算就没有问题。

    而且我的列式都错了哇… (f(x,y,k)) 的计算不需要加组合数,组合数是模拟枚举集合的过程。

  • 相关阅读:
    POJ 1426 Find The Multiple(数论——中国同余定理)
    POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
    POJ 3790 最短路径问题(Dijkstra变形——最短路径双重最小权值)
    POJ 3278 Catch That Cow(模板——BFS)
    HDU 1071 The area
    HDU 1213 How Many Tables(模板——并查集)
    POJ 1611 The Suspects
    light oj 1214 Large Division
    POJ 1258 Agri-Net(Prim算法求解MST)
    POJ 2387 Til the Cows Come Home(模板——Dijkstra算法)
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/12665074.html
Copyright © 2011-2022 走看看