模板:广义二项式反演/广义容斥(组合数学)

文章目录

  • 前言
  • 经典容斥原理
  • 广义二项式反演/广义容斥
  • min-max 容斥

所谓二项式反演,就是对两个项的式子进行反演。

(逃)

前言

期望和容斥是我的感性二兄弟!
之前的容斥我基本也都是靠感性理解做的…
感性理解就会导致:考场上试着写出一个式子,不知道它对不对。
然后就会有写出正确式子但是不敢敲代码,或者敲了半天过不去样例才明白自己的式子是错的(甚至还怀疑是不是代码写挂了)这样的悲剧发生(我都经历过
前天差不多搞完了期望,今天轮到容斥了!
让我们暂时放下感性,拥抱数学。

PS:本篇有大量的数学语言,其中的一些变换来自与对式子实质的理解,直接硬看可能难以明白。建议看清楚大致思路后就按照自己的路子推一遍。(因为我就是这么做的

经典容斥原理

我本来想叫它狭义容斥,但似乎有点瞧不起它…
就像经典力学不叫狭义力学一样。
抽象的内容如下:
假设有 kkk 个性质,满足每个性质的集合分别为 A1...kA_{1...k}A1...kS={Ai∣1≤i≤k}S=\{A_i|1\le i\le k\}S={Ai1ik},那么就有:
∣⋂i=1kAi∣=∑T⊆S(−1)∣T∣×∣⋂i=1∣T∣Tiˉ∣|\bigcap_{i=1}^k A_i|=\sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}|i=1kAi=TS(1)T×i=1TTiˉ
证明:
GP={x∣∀Ai∈P,x∈Ai,∀Ai∉P,x∉Ai}G_P=\{x|\forall A_i\in P,x\in A_i,\forall A_i\notin P,x\notin A_i\}GP={xAiP,xAi,Ai/P,x/Ai},也就是恰好满足性质集合 PPP 的元素集合
考虑每个 GGG 集合的统计次数,就有:
∑T⊆S(−1)∣T∣×∣⋂i=1∣T∣Tiˉ∣=∑P⊆S∣GP∣∑T∩P=∅(−1)∣T∣=∑P⊆S∣GP∣∑T⊆Pˉ(−1)∣T∣=∑P⊆SGP[Pˉ=∅]=∣⋂i=1kAi∣\sum_{T\subseteq S}(-1)^{|T|}\times|\bigcap_{i=1}^{|T|}\bar{T_i}|=\sum_{P\subseteq S}|G_P|\sum_{T\cap P=\emptyset}(-1)^{|T|}\\=\sum_{P\subseteq S}|G_P|\sum_{T\subseteq \bar{P}}(-1)^{|T|}=\sum_{P\subseteq S}G_P[\bar{P}=\emptyset]\\=|\bigcap_{i=1}^k A_i|TS(1)T×i=1TTiˉ=PSGPTP=(1)T=PSGPTPˉ(1)T=PSGP[Pˉ=]=i=1kAi
证毕。

广义二项式反演/广义容斥

通常是用来进行至多和恰好之间的转化

本人非常不喜欢广义容斥这个名字。
因为感觉它有误导性,我很长时间都是按照容斥的角度硬理解,但是就用容斥三个圈套来套去的那点东西,把组合数说成几个里面选几个,硬考虑统计次数,似乎很难讲明白,也许其实也可以那么理解,只是我不会qwq。
我感觉还是从它的另一个叫法:广义二项式反演 的角度来理解更加简单。
定义 fxf_xfx至少xxx 个元素的方案数,gxg_xgx恰好xxx 个元素的方案数。
则有:
fx=∑i=xnCixgif_x=\sum_{i=x}^nC_i^x g_ifx=i=xnCixgi
然而,通常情况下,ggg 的值较难求出,而 fff 的值相对简单,这是就需要进行反演用 fffggg
gx=∑i=xn(−1)i−xCixfig_x=\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_igx=i=xn(1)ixCixfi
证明:
∑i=xn(−1)i−xCixfi\sum_{i=x}^n(-1)^{i-x}C_{i}^xf_ii=xn(1)ixCixfi
=∑i=xn(−1)i−xCix∑j=inCjigj=\sum_{i=x}^n(-1)^{i-x}C_{i}^x\sum_{j=i}^nC_j^ig_j=i=xn(1)ixCixj=inCjigj
=∑j=xngj∑i=xj(−1)i−xCixCji=\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_i^xC_j^i=j=xngji=xj(1)ixCixCji
=∑j=xngj∑i=xj(−1)i−xCjxCj−xi−x=\sum_{j=x}^ng_j\sum_{i=x}^j(-1)^{i-x}C_j^xC_{j-x}^{i-x}=j=xngji=xj(1)ixCjxCjxix
=∑j=xnCjxgj∑i=0j−x(−1)iCj−xi⋅1(j−x)−i=\sum_{j=x}^nC_j^xg_j\sum_{i=0}^{j-x}(-1)^{i}C_{j-x}^{i}\cdot1^{(j-x)-i}=j=xnCjxgji=0jx(1)iCjxi1(jx)i
=∑j=xnCjxgj[j=x]=\sum_{j=x}^nC_j^xg_j[j=x]=j=xnCjxgj[j=x]
=gx=g_x=gx
证毕。

类似的,若 fxf_xfx至多xxx 个元素的方案数,gxg_xgx恰好xxx 个元素的方案数。
则有:
fx=∑i=0nCxigif_x=\sum_{i=0}^nC_x^i g_ifx=i=0nCxigi

gx=∑i=0x(−1)x−iCxifig_x=\sum_{i=0}^x(-1)^{x-i}C_{x}^if_igx=i=0x(1)xiCxifi
证法类似。

min-max 容斥

感觉换汤不换药。
给出式子:
max⁡(S)=∑T⊂S(−1)∣T∣min⁡(T)\max(S)=\sum_{T\sub S}(-1)^{|T|}\min(T)max(S)=TS(1)Tmin(T)
min⁡(S)=∑T⊂S(−1)∣T∣max⁡(T)\min(S)=\sum_{T\sub S}(-1)^{|T|}\max(T)min(S)=TS(1)Tmax(T)
这里只给出第一个式子的证明,第二个式子的证明较为类似。
考虑最大值 max⁡(S)\max(S)max(S),它成为最小值产生贡献当且近当 T={max⁡(S)}T=\{\max(S)\}T={max(S)},显然只会产生一次正贡献。
而对于不是最大值的元素 x∈Sx\in SxS,设比它大的元素的个数为 kkk,那么它成为最小值产生贡献当且近当 TTT 为前 kkk 个元素的某个子集并上 {x}\{x\}{x},那么它的系数就是:
∑i=0x(xi)(−1)i\sum_{i=0}^x\binom{x}{i}(-1)^ii=0x(ix)(1)i
二项式反演一下:
∑i=0x(xi)(−1)i=∑i=0x(xi)(−1)i(1)x−i=(1−1)x=0\sum_{i=0}^x\binom{x}{i}(-1)^i=\sum_{i=0}^x\binom{x}{i}(-1)^i(1)^{x-i}=(1-1)^{x}=0i=0x(ix)(1)i=i=0x(ix)(1)i(1)xi=(11)x=0
所以所有不是最大值的元素的贡献都是0。
那么最后西格玛的结果就是 max⁡(S)\max(S)max(S)

注意:这个式子当最小值不唯一的时候依然成立min⁡(T)\min(T)min(T) 的含义就变为了所有并列最小值的和。但是所求的最大值必须唯一!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebApiClient与Asp.net core DI的结合

1 WebApiClient一款基于HttpClient封装,只需要定义c#接口并修饰相关特性,即可异步调用远程http接口的客户端库WebApiClientWebApiClient.ExtensionsWebApiClient.Tools2 Http接口的注册与提供2.1 声明远程端http接口public interface IBaiduApi : IHttpA…

Codeforces Round #717 (Div. 2)

Codeforces Round #717 (Div. 2) CodeForces 1516 题号题目知识点ATit for Tat贪心BAGAGA XOOORRR思维题CBaby Ehab Partitions AgainDCutEBaby Ehab Plays with Permutations

梁迪:源于热爱乐于分享,MVP代表圆桌会议

梁迪《MVP代表圆桌会议》MVP代表圆桌会议,源于热爱乐于分享。来自全国的MVP(周岳、苏震巍、蒋金楠、胡浩、卿毅、项斌、刘浩杨、施兆熊、方洁影、方骥、刘鑫、童广林)作经验交流。梁 迪微软最有价值专家(MVP)项目大…

2.7模拟总结

文章目录前言考场题目解析T1T2T3代码T1 forestT2 eulerT3 graph前言 130pts 2010010 终于没有挂分! 开心! 然而今天的题确实过于阴间…三道题几乎都没法写暴力,爆零场了属于是。 我这个分数都能到rnk4勒。 (rnk39->rnk4&#…

基于xlua和mvvm的unity框架

1、框架简介这两天在Github上发现了xlua的作者车雄生前辈开源的一个框架—XUUI,于是下载下来学习了一下。XUUI基于xlua,又借鉴了mvvm的设计概念。xlua是目前很火的unity热更方案,不仅支持纯lua脚本热更,也可以做 C# 代码的bug hot…

A - Tit for Tat CodeForces - 1516A

A - Tit for Tat CodeForces - 1516A 题意: 一个长度为 n 的数组,现在希望你对这个数组进行至多k次操作:在数组中选择 2 个不同的元素,将第一个元素加 1 ,然后从第二个元素减 1 。不过他有一个要求,进行操…

Codeforces Round #703 (Div. 2) 题解

文章目录A. Shifting StacksB. Eastern ExhibitionC. Guessing the GreatestD. Max MedianE. Paired PaymentF. Pairs of Paths#703 (Div. 2)A. Shifting Stacks 从左往右构造递增0,1,2...,如果这样都不能递增就肯定无解 雷区:不能用等差数列算个数&am…

AGAGA XOOORRR CodeForces - 1516B

AGAGA XOOORRR CodeForces - 1516B 题意: 给定一个长度为n的序列,对其进行若干次操作,每次操作将某相邻两数变为他们的异或和(操作后序列长度减一)。问是否可以经过若干次操作,得到一个长度至少为2且所有…

2.8模拟总结

前言 80pts 303020 rnk10 三个暴力分… T2拿虚树玩了半天结果假了qwq 乍一看似乎都挺可做的。 但是一道都做不出来 (觉得写考场过程有点流水账,不写了,一些想说的写在对应题目里吧) 题目解析 T1 三角查找(triangle&…

如何在ASP.NET Core中使用JSON Patch

原文: JSON Patch With ASP.NET Core作者:.NET Core Tutorials译文:如何在ASP.NET Core中使用JSON Patch地址:https://www.cnblogs.com/lwqlun/p/10433615.html译者:Lamond LuJSON Patch是一种使用API显式更新文档的方…

Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解

文章目录A. Prison BreakB. Restore ModuloC. Basic DiplomacyD. PlaylistE. Skyline PhotoF. Useful Edges#709 (Div. 2)A. Prison Break 就是每个监狱破一扇门,输出aba\times bab即可 B. Restore Modulo 就是取模意义下的操作,分大小操作&#xff0…

351E. Jeff and Permutation

351E. Jeff and Permutation 题意: 一个长度为n的序列,你可以选择一些位置,使其变成相反数,问逆序对最少是多少? 题解: 对于第i位,我们开始考虑他能决定的逆序对?对于其他任意位…

.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接

众所周知在.NET下的RSA类所生成的密钥为Xml格式,而其他语言比如java一般使用pkcs8格式的密钥,JavaScript一般使用pkcs1格式。我们在开发过程中很可能遇到需要与其他语言开发的api进行对接,如果遇到RSA加密解密,我们肯定需要保证ke…

2.9模拟总结

文章目录前言题目解析序列计数(sequence)T2 网格选点(grid)T3 孤立点集(isolated)代码T1T2T3总结前言 180pts 3050100 rnk10 题目比较简单的一场考试。 不太满意。 T3是做过的原题,切了不算啥…

AtCoder Beginner Contest 203(Sponsored by Panasonic)题解

文章目录A - ChinchirorinB - AtCoder CondominiumC - Friends and Travel costsD - PondE - White PawnF - WeedABC203A - Chinchirorin 三个条件if判 #include <cstdio> int main() {int a, b, c;scanf( "%d %d %d", &a, &b, &c );if( a b ) …

AcWing 1068. 环形石子合并

AcWing 1068. 环形石子合并 题意&#xff1a; n堆石头围成一个圈&#xff0c;然后将相邻两堆合并成新的一堆&#xff0c;得分为新的一堆的石头数 问最高得分合最低得分 题解&#xff1a; 很简单&#xff0c;区间dp的模板题 和这个题一样 状态转移方程&#xff1a; dpmax[i]…

2.10模拟总结

文章目录前言题目解析随机减法&#xff08;calculate&#xff09;大图书馆&#xff08;bibliotheca&#xff09;子串选取 &#xff08;substr&#xff09;代码T1T2T3总结前言 200pts 4010060 rnk3 拿到牌勒嘿嘿嘿&#xff08;脑补流口水黄豆&#xff09; T3两个log想在ybt的机…

ABP VNext 微服务演示,项目状态和路线图

在ABP vNext上的第一个公告之后,我们对代码库进行了很多改进(GitHub存储库上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态.ABP微服务演示解决方案ABP框架的主要目标之一是提供创建微服务解决方案的便利基础设施.我们一直在努…

加分二叉树

加分二叉树 题意&#xff1a; 给你一个数的中序表达式&#xff0c;然后一颗子树的分数左子树的分数*右子树的分数根的分数 给你所有点的分数&#xff0c;让你构造出分值最大的树&#xff0c;输出前序遍历 题解&#xff1a; 区间dp问题 设dp[i][j]表示中序遍历是w[i~j]的所有…

AtCoder ZONe Energy Programming Contest 题解

文章目录A - UFO InvasionB - Sign of FriendshipC - MAD TEAMD - Message from AliensE - SneakingF - Encounter and FarewellZONe Energy Programming ContestA - UFO Invasion 太简单了。 #include <cstdio> char ch[10] { Z, O, N, e }; char s[20];int main() {…