blog。剩下几分钟的时候胡出来了,但是时间不够,痛失 AK /dk。
\(N\le22\),显然状压 DP。\(dp_s\) 表示确定 \(s\) 集合的元素所需的代价(这些元素都放在最前面)。
确定了 \(s\) 后,发现会有 \(\operatorname{popcount}(s)\) 个元素堆在前面,那么枚举 \([L,R]\) 接在后面,也就是 \([\operatorname{popcount}(s)+1,\operatorname{popcount}(s)+(R-L+1)]\) 的位置。
枚举 \([L,R]\), 需满足 \(\forall L\le i\le R, i\notin s\)。\(dp_{s\cup[L,R]}\gets dp_s+C+\sum\limits_{i=L}^R|a_i-b_{i\text{ 对应的位置}}|\)。
直接枚举 \([L,R]\), 时间复杂度 \(O(n^22^n)\)。枚举出 \(L\) 后 \([L,R]\) 可以递推,时间复杂度 \(O(n2^n)\)。
code,时间复杂度 \(O(n2^n)\)。