首页 > 其他 > 详细

题解 CF603A Alternative Thinking

时间:2021-07-17 10:46:22      阅读:27      评论:0      收藏:0      [点我收藏+]

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

完结撒花。

题解 CF603A Alternative Thinking

原文:https://www.cnblogs.com/zplqwq/p/15022134.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!