### 为何写这篇题解。
洛谷月赛重题。
### 问题分解。
我们将这个问题分解为以下几个小问题:
- 理解并优化操作顺序。
- 确定反转操作的优化策略。
- 确定推平操作的优化策略。
- 设计动态规划算法来求解最小操作次数。
------------
### 解决问题。
##### 问题1:如何优化操作顺序?
- 如果两个操作的区间有交集,我们可以先推平再反转,这样可以减少操作次数。
- 如果两个操作的区间没有交集,我们可以任意调整它们的顺序,不会影响最终结果。
##### 问题2:如何优化反转操作?
- 对于同一个位置,最多只需要进行一次反转操作。因为两次反转操作相当于没有操作。
##### 问题3:如何优化推平操作?
- 如果一个区间已经被推平,那么在这个区间上再进行推平操作是没有意义的。
##### 问题4:如何设计动态规划算法?
我们设计一个三维动态规划数组 $dp_{i,j,k}$ ,其中 $i$ 表示考虑前 $i$ 个位置,$j$ 表示当前状态,$j = 0$ 表示不在推平区间内,$j = 1$ 表示在推平区间内且推平的值为 $0$,$j = 2$ 表示在推平区间内且推平的值为 $1$。
$k$ 表示是否在反转区间内,$k = 0$ 表示不在,$k = 1$ 表示在。
状态转移方程如下:
- 不进行任何操作:$dp_{i,j,k} = dp_{i-1,j,k}$
- 进行推平操作:如果 $A_i$ 与 $B_i$ 相等,则可以选择推平操作,将 $A_i$ 设为 $B_i$。
- 进行反转操作:如果 $A_i$ 与 $B_i$ 不相等,则必须进行反转操作。
------------
### 解题答案。
最终答案为 $dp_{n,0,0}$,其中 $n$ 为数组的长度。