SOSdp
从子集和问题到and卷积
枚举子集:
子集和问题参考好的博客https://ottffyzy.github.io/algos/dp/sosdp/
其实这类算法更多的是解决子集和 (sum of subset) 问题,因此也叫 SOS DP。
也就是对于i从1-n我们希望求出
一个平凡的做法是直接枚举子集:
引入高维前缀和可以优化到
对于高位前缀和如果容斥计算,不仅麻烦而且复杂度不优
注意到这里其实对于每个三重循环,我们可以任意排列 i,j,k 循环的位置。仔细观察,我们其实是在按照维度依次做前缀和(每次处理了前 p个维度的前缀和)。
这里我们发现复杂度从原本的容斥
高维和和子集和的关系
这里我们注意到,实际上子集和可以按照位数 D 分为 D 个维度(每个维度只有 0,10,1 两个取值),而实际上每个子集和对应了一个 D 维超立方的前缀和。
这里我们可以完全的将求前缀和的方式搬到这里求子集和。
只是细节需要注意,任意一维 被−1 的位置可以假想对应了一个 0 的值,于是我们发现我们实质上在处理第 p 维时,只需要注意那些该维为 1 的位置。这里我们用 表示超立方体已经处理了下标 0∼d维度时的前缀和。
我们发现可以采用滚动数组省去一维
当我们知道了子集和,我们可以倒推出本身的权值。
超集和
当我们知道了超集和,我们可以倒推出本身的权值。
实战:毛营B题Binomial - Problem - QOJ.ac
题意:给定一个数组 ,求有几对数字 满足 满足 为奇数
Sol:结论题: 为奇数的条件是 n & m = m
也就是对于C(n,k),若n&k == k 则C(n,k)为奇数,否则为偶数
严谨证明:考虑卢卡斯定理的推论,尝试证明mod2意义下为1
将
取p=2的时候,也就是对n和m的二进制拆分,我们希望为奇数,也就是必须全为1,也就是a[i]为0的位不参与计算,就是只计算二进制有效位。此时无论b[i]在这位为0或1结果,本次计算都是1,多个1相乘还是1,也就证明了计算结果是奇数
综上所述,原问题等价于在数组中找到有多少对包含关系
由于题目既不要求自环又不要求偏序,所以我们需要先把所有数存下来,再去dp。
Codeforces Round 112 (Div. 2)E
题意:给定一个数组,对于每个 找到 满足 .如果有多个j满足要求,输出最小满足要求的j(cf上题目没要求,但可以加强)
Sol:考虑对于二进制位的取值情况,原问题等价于找~a[i]的子集,我们只需要正常做一遍sosdp。然后考虑统计答案。又由于设置最小,我们考虑对于dp的时候使用min运算维护值域对应的最小下标,答案是要输出元素
Codeforces Round 225 (Div. 1)E
题意:字符集为小写字母前24个。共有 的子集,给定若干长度为3的单词。对于每个子集,我们认为当前子集里的元素是元音,每个单词至少含1个元音才合法,回答在当前子集条件下有多少正确的单词?
Sol:将单词映射成二进制位,我们只关心当前单词有哪几个元素,不用关心重复元素。假设集合为s,当前单词为 ,我们需要统计有多少个i满足 ,这样正着考虑复杂度太高,我们考虑反面, 的i的数量num,答案用n-num得到。而与起来等于0在上题已经被解决,我们只需要正常sosdp,在统计答案的时候找~a[i]的子集的数量。
bug1没想清楚到底两个循环的边界
bug2:一开始没处理高维前缀和,导致统计答案的时候导致多加了一层循环
Codechef-COVERING Covering Sets CodeChef
题意: ,求 。
Sol:可参考大佬博客CodeChef COVERING - Covering Sets 题解 - ycx060617 - 博客园 (cnblogs.com)
我的理解:首先考虑无法直接
Codeforces F. Bits And Pieces(位运算) - Cold_Chair - 博客园 (cnblogs.com)
题意:给定 个数的数组 ,找到 的 ,使得 最大
Sol:对于这样的多循环变量,要么就是直接枚举一维,其他方法解决其他维。还有就是直接换角度,算贡献和次数。
位运算的比较基本的题。
考虑枚举i,然后二进制位从大到小考虑, 对于第𝑤位,如果
如果
__EOF__

本文链接:https://www.cnblogs.com/mathiter/p/18199404.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!