考虑 dp
.
我们令 \(f_{i,0}\) 表示当前第 \(i\) 个数字没有翻转,且前面无子串翻转的最大值。同理,\(f_{i,1}\) 表示当前第 \(i\) 个数字没有翻转,且前面有子串翻转的最大值。最后,\(f_{i,2}\) 表示前 \(i\) 个数字反转的最大值。答案即使三者取最大值。
一个小插曲,为什么想到这样设状态呢?
首先当然是因为题目就是这么问的。其次,我们分三个数组递推显然会很麻烦,不如用不同的 j
值来代表这三种情况。
既然如此,不难推出转移方程:
若 \(a_i = a_{i-1}\) 则:
\[\left\{\begin{array}{l}f_{i,0}=f_{i-1,0}\f_{i,1}=\max( f_{i-1,2}+1,f_{i-1,1})\f_{i,2}=\max( f_{i-1,2},f_{i-1,0}+1)
\end{array}\right.
\]
否则,则:
\[\left\{\begin{array}{l}f_{i,0}=f_{i-1,0}+1\f_{i,1}=\max( f_{i-1,1}+1,f_{i-1,2})\f_{i,2}=\max( f_{i-1,2}+1,f_{i-1,0})
\end{array}\right.
\]
最后初值:
\[\left\{\begin{array}{l}f_{1,0}=1\f_{1,1}=1\f_{1,2}=1
\end{array}\right.
\]
完结撒花。