尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

关于子集的枚举与高维前缀和

关于子集的枚举与高维前缀和
📅 发布时间:2026/6/19 12:14:28

今天集训的题我已经写不动了,下周开始会复习 dp, 现在就提前把一些东西补一补,这个说不好会在之后状压里边用到。

枚举子集

如何遍历一个集合的子集

通常我们会采取递归的方式,是 \(O(2^n)\) 的,但是这个样子我们在具体使用的时候是很不方便的,尤其是我们在对于一些二进制的东西做文章的时候。

所以我们需要这个循环形式的枚举子集。

for(int s=u; s; s=(s-1)&u)

这个样子我们就是在枚举 \(s\) 为 \(u\) 的子集了。

先谈正确性,后谈复杂度。

为什么这个东西可以不重不漏?

很明显的,我们的减一是严格下降的,按位与是严格不升的,每一次操作必然会变小,故不会重复。

至于正确性,我们的减一实际上是删除 s 中最后一个一,再把它的右边全部变成一。我们为了让这个东西变成新的子集,我们需要删除 u 之中没有包含的 1,这个我们直接按位与清除一下就好啦。

时间复杂度就是明显的了,我们仅仅需要关注 1 的数量,复杂度自然是 \(O(2^{popcount(u)})\)。

如何遍历一个集合子集的子集

for(int m=0; m<(1<<n); ++m){for(int s=m; s; s=(s-1)&m){......}
}

也就是直接套用上边的。

这个东西的复杂度是奇妙的,它竟然是 \(O(3^n)\) 的,比我们想象中要底很多很多。

如果 \(m\) 拥有 \(k\) 个 \(1\),那么我们会枚举出来 \(2^k\) 个子集。

而对于一个 \(k\),我们可以找出来 \(\binom{n}{k}\) 个对应的集合满足有 \(k\) 个 1。

总数就变成了:\(\sum_{k=0}^{n}\binom{n}{k}2^k\)。

根据二项式定理,这个东西等于 \((1+2)^n\) 的展开,因此是 \(O(3^n)\) 的,似乎很有用,避免了我们傻傻的 \(2^n\times 2^n\) 的枚举。

高维前缀和

又称 sosdp,我不知道为什么。

我们平常做一维或者二维前缀和都是用容斥原理求的,以二维为例。

\(sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j]\)。

但是我们还有一个求法,就是一维一维处理。

for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)a[i][j] += a[i - 1][j];
for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)a[i][j] += a[i][j - 1];

like that.

这个样子是一样的,我们采取这个思路。

对于求解 \(0\le i\le 2^n-1\),\(\sum_{j\in i} a[j]\) 这样的东西,我们可以使用这个思路。

我们不妨把集合看作多维空间中的点,第 \(i\) 位的 0/1 表示第 \(i\) 维的坐标。

于是乎就可以像之前那么做了,枚举维数与子集,在当前维度是 1 的地方从当前维度是 0 的地方转移过来。

for(int i=0; i<n; ++i){for(int j=0; j<(1<<n); ++j){if(j&(1<<i)) dp[j]+=dp[j^(1<<i)];}
}

于是就没有了,显然我们从枚举子集的 \(O(3^n)\) 优化到了 \(O(n\times 2^n)\)。

相关新闻

  • CSP-S模拟26
  • 关于滚动数组
  • 第九篇

最新新闻

  • 2026防晒墨镜哪些品牌排名高?TOP5清单出炉 - 速递信息
  • 上海汽车音响改装选哪家?上海音乐人生,二十年赛事级连锁标杆门店 - 音乐人生汽车音响
  • 技术解析:从Tri-Plane到3D GAN,如何实现高效且一致的神经渲染
  • 通过Selenium实现网页截图来生成应用封面
  • 2026苏州钻石回收实测|国标4C定级,全城无套路靠谱门店变现指南 - 薛定谔的梨花猫
  • C语言宽字符处理:wmemcmp、wmemcpy、wprintf核心函数详解与实战

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号