专栏文章
题解:AT_abc381_f [ABC381F] 1122 Subsequence
AT_abc381_f题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mir15sn9
- 此快照首次捕获于
- 2025/12/04 14:03 3 个月前
- 此快照最后确认于
- 2025/12/04 14:03 3 个月前
题意
定义一个正整数序列 为 1122 数列 当且仅当序列满足以下所有条件:
- 对于所有 的整数 ,满足 。
- 在 中出现过的整数恰好出现 次。
给出长度为 的序列 ,求出 的(可以不连续)子序列中,是 1122 数列 的序列的长度最大值。
思路
比较简单的状压 dp,还好场切了。
假设我们现在尝试构造一个合法序列。称 的值为颜色,用一次颜色 表示将两个满足 的不同下标加入序列末尾。由条件 3 每种颜色至多会被使用一次。同时我们每次往序列末尾添加某个颜色,只关注用过的最大下标(即加入颜色前序列末尾的下标),以及哪些颜色已经被用过,而由于颜色数 ,把这个信息记录下来是可行的。
考虑大概按照这个每次向序列末尾添加一个颜色的过程 dp,把我们关注的两样东西记入状态:记 表示顺次考虑到末尾下标为 的序列,使用颜色的集合为 是否可行(注意到序列长度即 ,不用记录什么“最大长度”)。转移枚举一个没用过的颜色 加到末尾,贪心地选取 之后最近的两个下标 且 ,转移到 。状态数 。
考虑优化状态。实际上你往一个前面已经决定好的序列末尾加入一个颜色,只关心的是颜色的集合,这些用过的颜色怎么排列是不重要的。而且 bool 的状态太浪费了,完全可以把 扔进状态对应的值里面去,即对同样颜色集合构成的序列只取末尾最靠前的转移。此时状态变为 ,表示使用颜色集合为 的合法序列,序列末尾下标的最小值。转移类似枚举 ,取最前的两个下标 满足 ,更新 。
最终 ,时间复杂度 ,对数来自二分求 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...