Multiplicity 题解
简要题意
给定一个序列 \(a\),求 \(\sum \limits _{i = 1} ^ n cnt_i\)。
\(cnt_i\) 表示在 \(a\) 中选择长度为 \(i\) 的非空子序列 \(b\) 使得 \(\forall j \in [1, i], j | b_j\) 的数量。
思路
计数题,考虑 dp
。
设 \(f_{i,j}\) 表示前 \(i\) 个数,选到第 \(j\) 个数的方案数。
对于第 \(i\) 个数,有选和不选两种情况。
记 \(x,y\) 分别表示选和不选的方案数。
易得
\[x = f_{i - 1, t - 1} (t | a_i) \\
y = f_{i - 1, j} \\
f_{i , j} = x + y
\]
然后再把第一维压掉就完了。
压掉之后要从后向前转移。
最后时间复杂度 \(\mathcal{O}(n \sqrt{\max(a_i)})\),空间复杂度 \(\mathcal{O}(n)\)。
如果是把决策点排序就要再代一个 \(\log\sqrt{\max(a_i)}\)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现