1 solutions
-
0
Guest MOD
-
0
T3. 禁止套娃
题意
求一个序列的所有本质不同子序列的本质不同子序列个数之和 。。
算法一
计算一个序列的本质不同子序列个数的方法如下:
由于会计重,考虑对于每一种子序列,钦定只对它最靠左(贪心)的匹配计数。容易证明存在唯一的这样的子序列到下标的映射。
令 表示末尾选 的本质不同子序列数,则 , 表示上一个与 相等的位置,如果不存在则为 。
或者,令 表示末尾选 的本质不同子序列数,则 。
外层暴枚可做到 ,期望得分 。
算法二
直接讲正解。
设选择的外层子序列下标为集合 ,内层为集合 。为了方便表述,设占位下标 。同样只计贪心匹配的情况,限制如下:
- 中相邻两个数 , 中不存在 的值。
- 中相邻两个数 , 中不存在 的值。
考虑对 dp。 表示目前考虑到 且内外层末尾均选 的答案。如果要从 转移过来,那么就要决定 这部分如何选外层,设选择了集合 ,限制如下;
- 中相邻两个数 , 中不存在 的值。
- 中最大值 , 中不存在 的值。
- 中任意 ,。
一个简洁的处理方法是,对于每一个 ,dp 出 每个 的只需满足 1、3 条件的本质不同子序列个数 ,真正转移时 即可。最后汇总答案可以弄一个必选的占位下标 。
是 2D/0D, 是 1D/1D,时间复杂度 ,期望得分 。
Information
- ID
- 1615
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- (None)
- Tags
- (None)
- # Submissions
- 0
- Accepted
- 0
- Uploaded By