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
浙公网安备 33010602011771号