1 条题解
-
0
猜猜为什么叫「追忆」。
对于一个子序列 ,考虑计算最大的 满足它是 -好的而不是 -好的,随后统计后缀和即可。考虑 如何计算,这是一个经典贪心,我们从 开始从左往右扫该序列,每次遇到一段满足 所有元素均出现就 并开始新的一段。
我们可以写出两种不同的 dp:
- 表示:考虑 的所有子序列,当前 的值为 ,最后未满的一段所有出现的元素构成集合 的方案数。转移直接枚举 是否被选择即可,然后将 转移到 。时间复杂度 。
- 忽略最后未满的一段。 表示当前选出了 段,且最后一段的结尾为 的方案数。 转移到 时,设 内元素 出现了 次,则转移系数为 。最后统计答案时,还要求出 表示 内有多少个子序列不满足 均出现至少一次,然后将 全部乘上 。时间复杂度 。
结合两种做法,时间复杂度 ,常数较小。std 的阈值取 。
信息
- ID
- 1149
- 时间
- 4000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 11
- 已通过
- 2
- 上传者