[算法] 容斥

news/2024/12/31 0:44:59/文章来源:https://www.cnblogs.com/PeppaEvenPig/p/18447358

对于某些毒瘤计数题,经常会出现统计重复或遗漏的问题,这时候就可能需要容斥一下

容斥原理

先从一个经典的例子入手:有三个学科,设为 $ S_1, S_2, S_3 $,有一堆人选不同的学科,现已知选每门学科各自有多少人选,求一共有多少人选学科;

根据题意,我们要求的就是:$ \mid S_1 \bigcup S_2 \bigcup S_3 \mid $;

考虑咋求,这是一个小学数学问题,直接用 $ |S_1| + |S_2| + |S_3| - |S_1 \bigcap S_2| - |S_2 \bigcap S_3| - |S_1 \bigcap S_3| + |S_1 \bigcap S_2 \bigcap S_3| $ 算一下即可;

其实这就是一个容斥;

扩展一下,将 $ S $ 抽象为若干个集合,对于 $ S_1, S_2, ... , S_n $,我们要求 $ | \bigcup_{i = 1}^{n} S_i | $,那么我们可以得到:

\[\big | \bigcup_{i = 1}^{n} S_i \ \big | \ = \ \sum_{i} |S_i| - \sum_{i < j} |S_i \cap S_j| + \sum_{i < j < k} |S_i \cap S_j \cap S_k| ... \]

这就是容斥原理

简记为:奇加偶减

对于其补集同理,有:

\[\big | \bigcup_{i = 1}^{n} \overline{S_i} \ \big | \ = \ \sum_{i} |\overline{S_i}| - \sum_{i < j} |\overline{S_i} \cap \overline{S_j}| + \sum_{i < j < k} |\overline{S_i} \cap \overline{S_j} \cap \overline{S_k}| ... \]

那么,对于集合的交,我们不难得到:

\[\big | \bigcap_{i = 1}^{n} S_i \big | = |U| - |\bigcup_{i = 1}^n \overline{S_i}| \]

其中 $ U $ 代表全集;

对于右者使用容斥原理即可;

这就是比较常用的三个公式(其实都差不多);

应用

不定方程非负整数解计数

这是本篇文章主要研究的问题;

问题: 给出不定方程 $ \sum_{i = 1}^n a_i = m $ 以及 $ n $ 个形如 $ a_i \leq b_i $ 的限制,求合法非负整数解的个数;

没有限制

我们看作有 $ n $ 个盒子,各个盒子放的球数就是对应一位 $ a $ 的值,有 $ m $ 个相同小球,盒子可以为空,求将小球放入盒子中的方案数;

如果每个盒子至少有一个球的话,那么我们可以用插板法来做,对于可以为空的情况,我们可以再加 $ n $ 个球依次放入每个盒子中,那么问题就转化成有 $ n + m $ 个小球,放入 $ n $ 个盒子中,用插板法做就是 $ \operatorname{C}_{n + m - 1}^{n - 1} $;

扩展一下,对于形如 $ \sum_{i = 1}^n a_i = m $ 以及 $ n $ 个形如 $ a_i \geq b_i $ 的限制的问题,我们可以先把对应位置放上其对应的 $ b $,那么依据上述思路答案为:

\[\operatorname{C}_{n + m - \sum_{i = 1}^{n} b_i - 1}^{n - 1} \]

其实上述问题就是 $ \forall i \in [1, n], b_i = 0 $ 的特殊情况;

有限制

发现我们按照没有限制做会算多 $ a_i \geq b_i + 1 $ 的情况,那么我们需要容斥掉它;

考虑刚刚容斥原理中的第三个公式,答案可表示为:

\[\big | \bigcap_{i = 1}^{n} S_i \big | = |U| - |\bigcup_{i = 1}^n \overline{S_i}| \]

其中对于 $ |\bigcup_{i = 1}^n \overline{S_i}| $,(就是 $ a_i \geq b_i + 1 $)我们应用第二个公式展开一下,得到:

\[\big | \bigcup_{i = 1}^{n} \overline{S_i} \ \big | \ = \ \sum_{i} |\overline{S_i}| - \sum_{i < j} |\overline{S_i} \cap \overline{S_j}| + \sum_{i < j < k} |\overline{S_i} \cap \overline{S_j} \cap \overline{S_k}| ... \]

随便提出一项 $ |\overline{S_i} \cap \overline{S_j} \cap \overline{S_k}| $,我们考虑它的实际意义,为 $ \sum_{i = 1}^n a_i = m $ 以及 $ 3 $ 个形如 $ a_i \geq b_i + 1 $, $ a_j \geq b_j + 1 $ $ a_k \geq b_k + 1 $ 的限制,求其方案数,依据上面的思路,可得答案为:

\[\operatorname{C}_{n + m - (b_i + 1) - (b_j + 1) - (b_k + 1) - 1}^{n - 1} \]

其他项同理;

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

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

相关文章

uboot 启动自编写程序的方式

uboot 启动自编写程序的方式 uboot 存在 boot 命令。 自己最初在尝试撰写串口程序时,选择了使用汇编来完成。 在这段时间,自己使用 go 命令来尝试载入程序 先是在 Ubuntu 上搭建 tftp 目录 # /etc/default/tftpd-hpaTFTP_USERNAME="tftp" TFTP_DIRECTORY="/ho…

10.Java集合框架_List接口

集合与数组的区别数组:长度开始时必须指定,而且一旦指定,不能修改。 保存的必须为同一类型的元素。 使用数组进行增加/删除元素比较麻烦。集合:可以动态保存任意多个对象,使用比较方便。 提供了一系列方便操作对象的方法: add、remove、set、get。 使用集合添加,删除新元…

20240924

[牛半仙的妹子 Tree(tree)](http://ac.robo-maker.cn/d/contest/p/ZY1044?tid=66f28cd11bca2159e88c8fb0) 我们会发现其实牛半仙发癫时就等于将以前的标记清空,从头开始,所以我们可以考虑根号分治,如果两个牛半仙发癫的时间间隔小于 \(\sqrt n\) ,那么我们可以直接暴力枚举两…

『模拟赛』冲刺CSP联训模拟2

『模拟赛记录』冲刺CSP联训模拟2Rank 不重要了A. 挤压 你说的对,期望怎么能算签呢? 一个重要的性质:一个数的平方可以在二进制下表示为 \(\sum_{i,j}\ s_i\ s_j\ 2^{i+j}\),所以就可以分别求每一位对答案的贡献了。 设 \(f_{i,1/0,1/0}\) 表示到第 \(i\) 个数我们枚举的两位…

PbootCms上传图片变模糊、上传图片尺寸受限的解决方案

在使用PbootCMS的过程中,如果上传的图片被压缩变得模糊,通常是因为上传的图片尺寸过大。PbootCMS 默认的上传图片限制宽度为 1920 像素,缩略图的限制大小为 10001000 像素。可以通过调整这些参数来解决这个问题。 解决方案打开 config.php 文件 调整 max_width 和 max_heigh…

ROS基础入门——实操教程

ROS新人可看ROS基础入门——实操教程前言 本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记。Ruby Rose,放在这里相当合理前言:本文初编辑于2024年10月24日 CSDN主页:https://blog.csdn.net/rvdgds…

PbootCMS增加可允许上传文件类型,例如webp、mov等文件格式扩展

在PbootCMS中增加可允许上传的文件类型(例如 webp、mov 等文件格式),需要在多个地方进行配置。以下是详细的步骤: 操作步骤 1. 修改 config.php 文件 首先需要修改 config.php 文件,增加允许上传的文件类型。打开 config.php 文件打开 config.php 文件,通常位于 /config …

出现“登录失败,表单提交校验失败”,请检查服务器环境

如果出现“登录失败,表单提交校验失败”,请检查服务器环境,然后刷新页面重试,或者删除 runtime 文件夹,然后刷新页面重试。 操作步骤删除 runtime 文件夹使用 FTP 客户端或 SSH 连接到服务器。 删除 runtime 文件夹:bashcd /path/to/your/site rm -rf runtime刷新页面清除…

多次密码错误导致登录界面锁定,可以删除网站的 runtime 文件夹

如果多次密码错误导致登录界面锁定,可以删除网站的 runtime 文件夹,然后刷新页面重试。 操作步骤删除 runtime 文件夹使用 FTP 客户端或 SSH 连接到服务器。 删除 runtime 文件夹:bashcd /path/to/your/site rm -rf runtime刷新页面清除浏览器缓存。 重新访问后台登录页面扫…

红日靶机(三)笔记

VulnStack-红日靶机三 概述 相交于前边两个靶场环境,靶场三的难度还是稍难一点,有很多兔子洞,这就考验我们对已有信息的取舍和试错,以及对渗透测试优先级的判断。涉及到对数据库操作的试错,对 joomla 框架 cve 的快速学习,php 中 用到disabled_function 的 bypass ,对li…

快乐数学2勾股定理0000000

2 勾股定理 在任意一个直角三角形中,两条直角边的平方和等于斜边的平方。 a + b = ca 和 b 分别表示直角三角形的两条直角边长度。 c 表示斜边长度。我们大多数人都认为这个公式只适用于三角形和几何图形。勾股定理可用于任何形状,也可用于任何将数字平方的公式。 2.1 了解面…

信息学奥赛复赛复习11-CSP-J2020-04方格取数-动态规划、斐波那契数列、最优子结构、重叠子问题、无后效性

PDF文档公众号回复关键字:202410041 P7074 [CSP-J2020] 方格取数 [题目描述] 设有 nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊会取走所有经过的…