当前位置: 首页 > news >正文

SOSDP

\(\text{SOSDP: Sum over Subsets DP}\)

例子:给定一个序列长度为 \(2^n\) 的序列 \(a\),求对于 \(i = 0,1,\cdots,2^n-1\)\(A_i\),其中 \(A_i = \sum\limits_{j\&i=j}a_j\),即 \(i\) 的子集和。

\(f_{i,s}\) 表示 \(s\) 的前 \(i+1\) 个低位子集的和,有:

\[f_{i,s} = \begin{cases} f_{i-1,s}, & (s>>i)\&1=0\\ f_{i-1,s} + f_{i-1, s \oplus 2^i}, & (s>>i)\&1=1 \end{cases} \]

初始化 \(f_{0, i} = a_i + a_{i\oplus 1}\)。时间复杂度 \(O(n2^n)\),空间复杂度 \(O(n2^n)\)

rep(i, 1, 1 << n) f[0][i] = a[i] + a[i ^ 1];
rep(i, 1, n - 1) rep(j, 0, (1 << n) - 1)
{f[i][j] = f[i - 1][j];if((j >> i) & 1) f[i][j] += f[i - 1][j ^ (1 << i)];
}

\(f_i\) 的转移只和 \(f_{i-1}\) 有关,考虑优化掉这一位。

\((s>>i)\&1=1\) 时,\(s \oplus 2^i < s\),可以将 \(s\) 这一维倒序枚举:

rep(i, 0, 1 << n) f[i] = a[i];
rep(i, 1, n) per(j, 0, (1 << n) - 1) if((j >> i) & 1) f[j] += f[j ^ (1 << i)];

再仔细想一下,在第 \(i\) 轮时,\(f_j\) 都是由 \(f_{j\oplus 2^i}\) 转移来的,更新为第 \(i\) 层的 \(f_j\)\(j\) 的第 \(i\) 位都是 \(1\),第 \(i-1\) 层的 \(f_{j\oplus 2^i}\)\(j\oplus 2^i\) 的第 \(i\) 为都是 \(0\)。所以正序枚举 \(j\) 也是可以的。

rep(i, 0, 1 << n) f[i] = a[i];
rep(i, 1, n) rep(j, 0, (1 << n) - 1) if((j >> i) & 1) f[j] += f[j ^ (1 << i)];

时间复杂度 \(O(n2^n)\),空间复杂度 \(O(2^n)\)

以上是求 \(i\) 的子集的和,要是求超集,可以把二进制的 \(0\) 看做 \(1\)\(1\) 看做 \(0\) 来做一次 \(DP\)

rep(i, 0, 1 << n) f[i] = a[i];
rep(i, 1, n) rep(j, 0, (1 << n) - 1) if(!((j >> i) & 1)) f[j] += f[j ^ (1 << i)];

\(\text{SOSDP}\) 与高维前缀和的关系:

给定 \(n\) 维序列 \(a\),求所有 \(S\),其中

\[S_{i_1,i_2,\cdots,i_n} = \sum\limits_{j_1\le i_1,j_2\le i_2,\cdots,j_n\le i_n}a_{j_1,j_2,\cdots,j_n} \]

若每一维的大小为 \(2\),则可以状态压缩,然后用 \(\text{SOSDP}\) 来做。

http://www.rkmt.cn/news/25275.html

相关文章:

  • 20232320 2025-2026-1 《网络与系统攻防技术》实验二实验报告
  • 在AI技术快速实现创意的时代,挖掘新需求成为核心竞争力——某知名内容管理系统能力框架需求探索
  • 联通光猫烽火吉比特HG6145F获取超级密码
  • 宠物去哪啦小程序系统:智能宠物管理与定位解决方案
  • 2025年整平机厂家推荐排行榜,整平机/校平机/矫平机/开平机/平板机/矫直机/校直机,高精度/精密/液压式/数控/金属/高效稳定/多种规格/全自动整平机公司推荐
  • 一佳旅游票务系统:旅游行业数字化一体化解决方案
  • 广告敏感词图文检测微信小程序:高效合规检测解决方案
  • 什么是人工智能?——AI的定义、发展历程与主要分类
  • CF2110F Faculty
  • pip会读取 pyproject.toml 的 project.dependencies 字段进行依赖安装吗?
  • python教程(一)
  • OpenAI Codex整合Z.ai GLM-4.6编程
  • 无状态HTTP的“记忆”高效的方案:Spring Boot中CookieSession全栈实战
  • LLM 笔记 —— 01 大型语言模型修炼史(Self-supervised Learning、Supervised Learning、RLHF) - 实践
  • el-dialog 嵌套遮罩灰色问题
  • Microsoft 代理框架简介(预览版):让每个开发人员都能轻松使用 AI 代理
  • 站位3
  • 基于深度学习的CT扫描图像肝脏肿瘤智能检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】 - 实践
  • resend 单次发送命令
  • 视频监控界的“万能翻译器”:视频汇聚平台EasyCVR视频接入功能全解读
  • 基于Ubuntu22.04 部署Dify详细教程
  • iOS 混淆工具链实战 多工具组合完成 IPA 混淆与加固(iOS混淆|IPA加固|无源码加固|App 防反编译)
  • 使用 Github Pages 和 Hexo 搭建博客
  • linux 移动硬盘加载失败
  • java Web 检查清单程序设计与实现 - 教程
  • 实用指南:如何快速学习一个网络协议?
  • 日记11
  • 2025年太阳能板定制厂家口碑排行榜单:权威推荐与选择指南
  • linux内核开发学习计划
  • 2025年湖北武汉实验室装修/实验室设计/实验室改造哪个厂家好