• 知识点简单总结——二项式反演


    知识点简单总结——二项式反演

    二项式反演

    二项式反演的最基础形式为:

    [f[ n ] = sumlimits_{ i = 0 }^{ n } ( -1 )^{ i } inom{ n }{ i } g[ i ] Longleftrightarrow g[ n ] = sumlimits_{ i = 0 }^{ n } ( -1 )^{ i } inom{ n }{ i } f[ i ] ]

    这个的证明基于多步容斥。

    由这个形式可以进一步推出常用的形式:

    [f[ n ] = sumlimits_{ i = 0 }^{ n } inom{ n }{ i } g[ i ] Longleftrightarrow g[ n ] = sumlimits_{ i = 0 }^{ n } ( -1 )^{ n - i } inom{ n }{ i } f[ i ] \ f[ n ] = sumlimits_{ i = n }^{ m } inom{ i }{ n } g[ i ] Longleftrightarrow g[ n ] = sumlimits_{ i = n }^{ m } ( -1 )^{ i - n } inom{ i }{ n } f[ i ] ]

    啊是的证明又咕了。(被打)

    应用

    有容斥的地方就可能用到它。

    一种很常见的是如下面两道例题的“恰好”和“钦定”的转化。

    bzoj2839 集合计数

    题意

    n个元素的集合有 $ 2^{ n } $ 个子集,选出至少一个集合使得交集大小正好为 $ k $ 的个数。 $ n le 10^{ 6 } $ 。

    题解

    套路化地交集改钦定。

    钦定的式子很简单的是 $ g( i ) = inom{ n }{ i } ( 2^{ 2 ^{ n - i } } - 1 ) $ ,即钦定哪 $ i $ 个必须选,从包含全部这 $ i $ 个元素的集合中选至少一个。

    答案就是 $ f( k ) =sumlimits_{ i = k }^{ n } ( -1 )^{ i - k } inom{ n }{ i } g( i ) $ 。

    [JSOI2011]分特产

    题意

    有 $ n $ 个人和 $ m $ 种物品,第 $ i $ 种物品有 $ a_i $ 个,同种物品之间没有区别。现在要将这些物品分给这些人,使得每个人至少分到一个物品,求方案数模 $ 10^{ 9 }+7 $ 。

    题解

    正难则反,“每个人都有分到物品”转化为“0个人没分到物品”。

    设 $ f( i ) $ 表示恰好 $ i $ 个人分不到, $ g( i ) $ 表示钦定某 $ i $ 个人分不到。

    [g( i ) = inom{ n }{ i } prodlimits_{ j = 1 }^{ m } inom{ n-i+a_{ j } - 1 }{ a_{ j } - 1 } ]

    之后则有 $ f( 0 ) =sumlimits_{ i = 0 }^{ n } ( -1 )^{ i } inom{ n }{ i } g( i ) $ 。

    例题

    先咕了,之后再补。

  • 相关阅读:
    【js】数据表格开启同比化显示,增加对比性
    Kotlin 使用协程编写高效的并发程序
    Kotlin泛型的高级特性
    kotlin基础
    Java接口和抽象类区别
    Java内存泄漏
    jmeter,注意:您可以通过定义属性resultcollector.action_if_file_exists来避免这个弹出框
    性能测试术语
    jenkins正常显示jmeter的html报告设置
    jmeter: beanshell后置处理程序,清空文件和保存json提取器提取的数据到文件中
  • 原文地址:https://www.cnblogs.com/rikurika/p/13418722.html
Copyright © 2020-2023  润新知