题解 CF603A Alternative Thinking

考虑 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. \]

完结撒花。

posted @ 2021-07-16 22:41  zplqwq  阅读(112)  评论(2编辑  收藏  举报