二项式反演

两年前学的东西,今天补一下笔记。

Intro

考虑 n 个有标号的元素。

fn 表示恰好 n 个元素满足条件(这里的条件取决于具体问题)的方案数,gn 表示指定 n 个元素满足条件的方案数。那么显然有

gn=i=nmCinfi

比如说,对于 fi,可以选出 n 个作为指定元素,所以对 gn 的贡献为 Cinfi

根据二项式反演,

fn=i=nm(1)inCingi

二项式反演还有一种形式是

gn=i=0nCnififn=i=0n(1)niCnigi

这里的 gn 表示从 n 个元素中指定 i 个元素满足条件的总方案数。

从组合意义上看第一种更常用。

Application

一般来说题目要求的东西和 f 有关(比如问恰好有多少个元素满足条件,至少多少个元素满足条件等等)。

通常 f 并不容易直接求出,那么我们就可以先将 g 求出来,再通过二项式反演得到 f

Example

Description

考虑一个有 n 个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。然后需要你求出 n 个元素的所有排列中有多少个是错排

Solution

这里我们可以将条件指定为元素在自己的位置上,可以发现 gi=Cni×(ni)!(因为指定 i 个元素在自己位置上后其他元素可以任意决策位置)。最后使用二项式反演求出 f0 就是答案了。

可以在这里尝试应用一下(题目同 Description

https://www.luogu.com.cn/problem/P1595

AC Code:

https://www.luogu.com.cn/record/185696122

posted @   HinanawiTenshi  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示