Codeforces Round 462 (Div. 1) A - A Twisty Movement
Codeforces Round 462 (Div. 1) A - A Twisty Movement
题目描述
给定一个由
分析
考虑 DP。
由于序列只有两个数,那么最终的非降子序列一定是
如果翻转后得到
因为最多交换一次,所以题目变成了找原序列的最长子序列,且形式为
一共有
-
如果第 $i$ 个数为 $1$,那么可以把这个数和以前的拼起来。答案为 $f_{i - 1, 0} + 1$。 否则,如果第 $i$ 个数为 $2$,那么这个数不可以作为第 $0$ 部分。答案为 $f_{i - 1, 0}$。 因此 $f_{i, 0} = \left\{\begin{matrix} f_{i - 1, 0} + 1 & (a_i = 1)\\ f_{i - 1, 0} & (a_i = 2)\end{matrix}\right.$。 -
如果第 $1$ 个部分为空,那么答案为 $f_{i, 0}$。以下都是不空的情况。 如果第 $i$ 个数为 $2$,那么可以把这个数和以前的拼起来。答案为 $f_{i - 1, 1} + 1$。 否则,如果第 $i$ 个数为 $1$,那么这个数不可以作为第 $1$ 部分。答案为 $f_{i - 1, 1}$。 因此 $f_{i, 1} = \left\{\begin{matrix} \max(f_{i, 0}, f_{i - 1, 1} + 1) & (a_i = 2)\\ \max(f_{i, 0}, f_{i - 1, 1}) & (a_i = 1)\end{matrix}\right.$。 -
如果第 $2$ 个部分为空,那么答案为 $f_{i, 1}$。以下都是不空的情况。 如果第 $i$ 个数为 $1$,那么可以把这个数和以前的拼起来。答案为 $f_{i - 1, 2} + 1$。 否则,如果第 $i$ 个数为 $2$,那么这个数不可以作为第 $2$ 部分。答案为 $f_{i - 1, 2}$。 因此 $f_{i, 2} = \left\{\begin{matrix} \max(f_{i, 1}, f_{i - 1, 2} + 1) & (a_i = 1)\\ \max(f_{i, 1}, f_{i - 1, 2}) & (a_i = 2)\end{matrix}\right.$。 -
如果第 $3$ 个部分为空,那么答案为 $f_{i, 2}$。以下都是不空的情况。 如果第 $i$ 个数为 $2$,那么可以把这个数和以前的拼起来。答案为 $f_{i - 1, 3} + 1$。 否则,如果第 $i$ 个数为 $1$,那么这个数不可以作为第 $3$ 部分。答案为 $f_{i - 1, 3}$。 因此 $f_{i, 3} = \left\{\begin{matrix} \max(f_{i, 2}, f_{i - 1, 3} + 1) & (a_i = 2)\\ \max(f_{i, 2}, f_{i - 1, 3}) & (a_i = 1)\end{matrix}\right.$。
最后答案为