首页 > 其他分享 >容斥学习笔记

容斥学习笔记

时间:2024-02-15 15:55:05浏览次数:27  
标签:方案 dbinom limits sum cap 容斥 笔记 学习

容斥

基本公式
\(|\bigcup\limits_{i=1}^na_i|=\sum\limits_{T\subseteq[1,n]}-1^{|T|+1}|\bigcap\limits_{i\in T}a_i|\)

min-max容斥

\(\max_{i\in S}a_i=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\min_{i\in T}a_i\)

\(\min_{i\in S}a_i=\sum\limits_{T\subseteq S}(-1)^{|T|+1}\max_{i\in T}a_i\)

二项式反演

二项式反演用于解决“某种物品恰好若干个”这类的问题,与容斥原理类似。

一般形式:若\(g_n=\sum\limits_{i=0}^n\dbinom{n}{i}f_i\),那么有\(f_n=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^{n-i}g_i\)

证明:将\(g_i\)展开,得

\[\begin{aligned} f_n&=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^{n-i}\sum\limits_{j=0}^i\dbinom{i}{j}f_j\\ &=\sum\limits_{j=0}^nf_j\sum\limits_{i=j}^n\dbinom{n}{i}\dbinom{i}{j}(-1)^{n-i}\\ &=\sum\limits_{j=0}^nf_j\sum\limits_{i=j}^n\dbinom{n}{j}\dbinom{n-j}{i-j}(-1)^{n-i}\\ &=\sum\limits_{j=0}^nf_j\dbinom{n}{j}\sum\limits_{k=0}^{n-j}\dbinom{n-j}{k}(-1)^{n-j-k}\\ &=\sum\limits_{j=0}^nf_j\dbinom{n}{j}\sum\limits_{k=0}^{n-j}\dbinom{n-j}{k}(-1)^{n-j-k}1^k &=\sum\limits_{j=0}^nf_j\dbinom{n}{j}(-1+1)^{n-j}\\ &=\sum\limits_{j=0}^nf_j\dbinom{n}{j}[n-j==0]\\ &=f_n \end{aligned}\]

一般的二项式反演形式有两种,一是\(g_n\)表示至多\(n\)个的方案数,\(f_n\)表示恰好\(n\)个的方案数,那么有

\[g_n=\sum\limits_{i=0}^n\dbinom{n}{i}f_i\iff f_n=\sum\limits_{i=0}^n\dbinom{n}{i}(-1)^{n-i}g_i \]

二是\(g_n\)表示至少\(n\)个的方案数,\(f_n\)表示恰好\(n\)个方案数,那么有

\[g_j=\sum\limits_{i=j}^n\dbinom{i}{j}f_i\iff f_j=\sum\limits_{i=j}^n(-1)^{i-j}\dbinom{i}{j}g_i \]

1.P8329 [ZJOI2022] 树

题意:定义两颗树是好的当且仅当第1棵树每个点父亲编号小于它,第2棵树每个点父亲编号大于它,每个点恰好在一棵树上是叶子,求对1~\(n\) 求方案数。

思路:(不会容斥,好似) 首先考虑设 \(f(S)\) 表示第 1 棵树非叶集合为 \(S\) 的方案数,第二棵树为 \(g(S)\),那么很容易推出

\[ans=\sum\limits_{S\cap T=\varnothing,S\cup T=\{1,2,\cdots n\}}f(S)g(T) \]

但是 \(f(S)\) 和 \(g(S)\) 并不方便直接求,我们考虑容斥。设 \(f'(S)\) 表示第一棵树非叶集合 \(\subseteq S\) 的方案数,\(g'(S)\) 同理,那么可知

\[\begin{aligned}ans&=\sum\limits_{S\cap T=\varnothing,S\cup T=\{1,2,\cdots n\}}f(S)g(T)\\&=\sum\limits_{S\cap T=\varnothing,S\cup T=\{1,2,\cdots n\}}\sum\limits_{S'\subseteq S,T'\subseteq T}f'(S')g'(T')(-1)^{|S|-|S'|+|T|-|T'|}\\&=\sum\limits_{S'\cap T'=\varnothing}f'(S')g'(T')(-1)^{n-|S'|-|T'|}2^{n-|S'|-|T'|}\\&=\sum\limits_{S'\cap T'=\varnothing}f'(S')g'(T')(-2)^{n-|S'|-|T'|}\end{aligned} \]

这样似乎比之前的恰好更好处理一些。于是我们设 \(dp[i][j][k]\) 表示 \(|\{1,2,\cdots i\}\cap S'|=j,|\{i+1,i+2,\cdots n\}\cap T'|=k\) 的方案数。转移时根据 \(i\) 是属于 \(S'\) 还是 \(T'\) 还是都不属于进行分类讨论即可。

复杂度 \(O(n^3)\)。

2.P2332 [SCOI2006] 数字立方体

题意:有多少子立方体的和是 \(m\) 的倍数。

思路:算是神秘优化。

朴素的做法是 \(O(n^6)\) 的,要枚举两个坐标,考虑怎么优化。

如果确定了两维,那么就可以用桶记录下确定这两维后的所有和,此时满足条件的个数就是相同的和的个数的平方和,可以 \(O(n)\) 统计,于是复杂度就是 \(O(n^5)\)。

3.P8292 [省选联考 2022] 卡牌

题意:小 A 有 \(n\) 张卡牌,编号为 \(1, 2, \ldots, n\)。每张卡牌上写着一个正整数,第 \(i\) 张卡牌上的正整数为 \(s_i\)。

现在有 \(m\) 轮游戏,第 \(i\) 轮游戏会给出 \(c_i\) 个质数,小 A 需要选择任意多张卡牌,使得这些卡牌上面的正整数的乘积能被该轮游戏给出的每个质数整除。求有多少种方案。

思路:首先,可以想到用所有答案减去不合法的答案,不合法的方案也可以再容斥,就是不含某一个质数的方案数减去不含两个质数的方案数,依次类推。于是就有暴力枚举质因数的做法。

但是质因数还是很多,不能直接状压,这就让我们想到了 [NOI2015] 寿司晚宴,这题的做法是根分,小于根号部分的质数很少,可以状压,而且最多只有一个大于根号的质因子。

这题同样可以根分。小于根号部分的质因子只有 13 个,大于的部分,可以单独考虑,即如果这个质数被给出,那么方案数就是 \(2^{cnt[i]}-1\),否则就是 \(2^{cnt[i]}\)。小于的部分,我们可以暴力容斥,求出每个不含质因子的集合的答案,乘上容斥系数再求和即可。

标签:方案,dbinom,limits,sum,cap,容斥,笔记,学习
From: https://www.cnblogs.com/Xttttr/p/18016298

相关文章

  • [Kyana]学习隐写
    常用加密:base64、base32、MD5、字符串搜索解压密码音频隐写观察频谱图放大波形,高位为1低位为0,转换ASCIIMP3stegoLSB(最低位有效)摩斯电码图片隐写查看属性检查标志(用hxd等文本编辑器打开),如果不正确修改恢复图像,未完全显示时候修改图像宽高使图像恢复完全;图像结束标志......
  • Python 机器学习 线性回归 正则化线性模型
    ​ Python机器学习中,正则化是一种减少模型过拟合的技术,通过在损失函数中添加一个正则化项来实现。对于线性回归模型,常见的正则化方法有Lasso回归(L1正则化)、岭回归(L2正则化)和弹性网络回归(同时使用L1和L2正则化)。这些方法可以调整模型的复杂度,提高模型的泛化能力。1、欠拟合(Und......
  • 【Python】强化学习Q-Learning走迷宫
    Q-Learning是一种基于值函数的强化学习算法,这里用该算法解决走迷宫问题。算法步骤如下:1.初始化Q表:每个表格对应状态动作的Q值。这里就是一个H*W*4的表,4代表上下左右四个动作。2.选择动作:根据Q表格选择最优动作或者以一定概率随机选择动作。3.执行动作,得到返回奖励(这......
  • 动态规划基础笔记
    背包问题 01背包  一般的动态规划要先考虑好状态,这个状态是一个集合,要能分成几个子集,然后从这些子集(小问题),推到这一整个集合(大问题),且求解过程是一样的,就可以可以转换成大问题分解成小问题一个一个求解,最后合并先要知道状态表示什么再要知道dp的属性,应该跟所求有关,只会......
  • 思源笔记—代码片段
    Vue引用主题样式.protyle-wysiwyg[data-node-id].bq,.b3-typographyblockquote{border-left:0.25emsolid#5ebc1d!important;border-radius:0em0.31em0.31em0.em;background-color:rgb(10624190/5%)!important;margin-top:8px!important......
  • 基础图论笔记
    二分图  染色法  例题ACwing860-染色法判断二分图(染色法)-CSDN博客给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。输出格式如......
  • Go语言精进之路读书笔记第27条——尽量定义小接口
    接口越大,抽象程度越低——RobPike,Go语言之父27.1Go推荐定义小接口无论标准库还是社区项目,都遵循了“尽量定义小接口”的建议,方法数量在1~3个范围内的接口占了绝大多数。27.2小接口的优势1.接口越小,抽象程度越高,被接纳度越高抽象程度越高,对应的集合空间越大。无方法的......
  • 【阅读笔记】空域保边降噪《Side Window Filtering》
    1、保边滤波背景保边滤波器的代表包括双边滤波、引导滤波,但是这类滤波器有一个问题,它们均将待处理的像素点放在了方形滤波窗口的中心。但如果待处理的像素位于图像纹理或者边缘,方形滤波核卷积的处理结果会导致这个边缘变模糊。基于这个观察,《SideWindowFiltering》的作者提出......
  • Java学习日记 Day16 正月初五,学习回归正轨!
    年前把SSM和Linux学完了,过年期间简单的做了个ssm的项目,再理解理解SSM。今天继续学了radis,也是比较重要的一个技术。radis:简单来说就是把数据存到缓存里的技术,常常和关系数据库结合使用,我们可以把数据库拿出来的数据存到缓存里,这样减少了io的次数,大大提高了效率。radis的学习大......
  • STM32之红外遥控信号自学习实现
    一、序言很早前就想实现这个红外遥控自学习的这个实验,用于来自己控制房子里如空调等红外遥控设备的自动化,NEC的标准到具体的产品上可能就被厂家定义为不一样了,所以自学习就应该是接收到什么就发送什么,不用管内容是什么!二、硬件实现原理由上述原理图可知,当IE为高电平时发送红外......