CF2033C Sakurako's Field Trip

Posted on 2025-04-18 23:13  K_J_M  阅读(32)  评论(0)    收藏  举报

Sakurako's Field Trip

题目描述

老师让学生排成一列,每个学生的兴趣主题是 \(a_i\)。干扰是相邻学生兴趣相同的对数,即满足 \(a_j=a_{j+1}\) 的情况数(\(1\le j<n\))。
你可以选择任意学生位置 \(i\),将其与位置 \(n-i+1\) 的学生交换,操作次数不限。
任务是通过这些交换操作,计算队伍中最小的干扰数。

Solution

考虑 dp 。由于每一次交换只对 \(i\)\(n-i+1\) 有影响,所以可以只对一半进行 dp。设 \(dp_{i,0}\) 表示对 \(i\)\(n-i+1\) 进行 \(0\) 操作的最小干扰数, \(dp_{i,1}\) 表示对 \(i\)\(n-i+1\) 进行 \(1\) 操作的最小干扰数。值得注意的是,我们从中间位置往两边 dp。那么 dp 方程为

\[\begin{cases} dp_{i,0}=\min{\begin{cases} dp_{i+1,0}+[a_i=a_{i+1}]+[a_{n-i+1}=a_{n-i}]\\ dp_{i+1,1}+[a_i=a_{n-i}]+[a_{n-i+1}=a_{i+1}] \end{cases}}\\ dp_{i,1}=\min{\begin{cases} dp_{i+1,0}+[a_{n-i+1}=a_{i+1}]+[a_{i}=a_{n-i}]\\ dp_{i+1,1}+[a_i=a_{i+1}]+[a_{n-i+1}=a_{n-i}] \end{cases}} \end{cases}\]

初始值分为两种,如果 \(n\) 为奇数,那么 \(dp_{(n-1)/2+1,0}=dp_{(n-1)/2+1,1}=0\),若 \(n\) 为偶数,那么 \(dp_{n/2,0}=dp_{n/2,1}=[a_{n/2}=a_{n/2+1}]\),其他情况为 \(∞\)。最终答案为 \(\min(dp_{1,0},dp_{1,1})\)。时间复杂度为 \(\mathcal O(n)\)
Ac Code