ARC114 - Moving Pieces on Line
ARC114 - Moving Pieces on Line
题目大意:
白色的数轴上有 \(n\) 个球 \(a_i\) ,给定若干递增且不交的区间 \([t_i,t_{i+1})\)
每次选择一个球向左或者向右滚,且将滚过的一段反色
求最小步数恰好仅将给定区间染黑色,或者确定不存在方案
模型转化
首先显然可以发现,每个小球只会滚过一段区间一次
设小球 \(i\) 最终停在 \(b_i\) ,则滚过这段数轴会被反色,且代价为 \(|a_i-b_i|\)
将最终颜色做异或差分,那么对于目标的反色,我们认为就是在每个 \(t_i\) 处放置了一个1
而对于所有 \(a_i\) ,就是在 \(a_i,b_i\) 处分别放置了一个1,这样就完全避免了关于 \(a_i,b_i\) 大小关系的问题
计算答案
由于已经固定了 \(a_i\) (设 \(a_i\) 已经排好序),我们需要决策 \(b_i\)
那么可以预先得到哪些位置需要放置奇数个 \(b_i\) ,设这个集合为 \(pos\)
若 \(|pos|>n\) ,显然无解
否则, \(b_i\) 的放置仅有两种情况
1.放在某一个 \(pos_i\) 处
2.让两个 \(b_i\) 放在同一个位置
对于 \(a,pos\) 排序之后的情况,显然较小的 \(a_i\) 会匹配较小的 \(pos_i\) ,代价为 \(|a_i-pos_i|\)
而情况2用掉的两个 \(b_i\) ,选择使用 \(b_i,b_{i+1}\) 一定不劣,并且代价就是 \(a_{i+1}-a_i\)
那么令 \(dp_{i,j}\) 表示前 \(i\) 个 \(a_i\) ,已经匹配了 \(j\) 个 \(pos_j\) 的代价,如上决策即可
1 |
|