专栏文章

题解: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 个月前
查看原文

题意

定义一个正整数序列 {b1,b2,,bm}\{b_1,b_2,\cdots,b_m\}1122 数列 当且仅当序列满足以下所有条件:
  1. m0(mod2)m\equiv 0\pmod 2
  2. 对于所有 1im21\le i\le \frac{m}{2} 的整数 ii,满足 b2i1=b2ib_{2i-1}=b_{2i}
  3. bb 中出现过的整数恰好出现 22 次。
给出长度为 nn 的序列 aa,求出 aa 的(可以不连续)子序列中,是 1122 数列 的序列的长度最大值。
1n2×105,1ai201\le n\le 2\times 10^5,1\le a_i\le 20

思路

比较简单的状压 dp,还好场切了。
假设我们现在尝试构造一个合法序列。称 aia_i 的值为颜色,用一次颜色 xx 表示将两个满足 ai=xa_i=x 的不同下标加入序列末尾。由条件 3 每种颜色至多会被使用一次。同时我们每次往序列末尾添加某个颜色,只关注用过的最大下标(即加入颜色前序列末尾的下标),以及哪些颜色已经被用过,而由于颜色数 m20m\le 20,把这个信息记录下来是可行的。
考虑大概按照这个每次向序列末尾添加一个颜色的过程 dp,把我们关注的两样东西记入状态:记 f(i,S)=0/1f(i,S)=0/1 表示顺次考虑到末尾下标为 ii 的序列,使用颜色的集合为 SS 是否可行(注意到序列长度即 2S2|S|,不用记录什么“最大长度”)。转移枚举一个没用过的颜色 xx 加到末尾,贪心地选取 ii 之后最近的两个下标 j,kj,kj<k,aj=ak=xj<k,a_j=a_k=x,转移到 f(k,S{x})f(k,S\cup\{x\})。状态数 O(n2m)O(n2^m)
考虑优化状态。实际上你往一个前面已经决定好的序列末尾加入一个颜色,只关心的是颜色的集合,这些用过的颜色怎么排列是不重要的。而且 bool 的状态太浪费了,完全可以把 ii 扔进状态对应的值里面去,即对同样颜色集合构成的序列只取末尾最靠前的转移。此时状态变为 fSf_S,表示使用颜色集合为 SS 的合法序列,序列末尾下标的最小值。转移类似枚举 xx,取最前的两个下标 j,kj,k 满足 fS<j<k,aj=ak=xf_S<j<k,a_j=a_k=x,更新 fS{x}min(fS{x},k)f_{S\cup \{x\}} \to \min(f_{S\cup \{x\}},k)
最终 ans=maxfSnSans=\max\limits_{f_S\le n}|S|,时间复杂度 O(m2mlogn)O(m2^m\log n),对数来自二分求 j,kj,k

评论

0 条评论,欢迎与作者交流。

正在加载评论...