题目描述
解题思路
翻转后的序列一定呈11111…2222
既然需要翻转成递增,则翻转段一定成递减,呈11…222…11…22
代码
#include <iostream>
using namespace std;
int main()
{
//将答案划分为1212四段,每一段的段尾有四个指针,记录当前指针在段里的位置
int s1 = 0, s2 = 0, s3 = 0, s4 = 0;
int n;
cin >> n;
while (n --)
{
int x;
cin >> x;
if (x == 1)
{
s1 = s1 + 1; //s1只能从s1转移而来
s3 = max(s3 + 1, s2 + 1); //从s3转移或s2转移
}
else
{
s2 = max(s1 + 1, s2 + 1); //从s1转移或s2转移
s4 = max(s3 + 1, s4 + 1); //从s3转移或s4转移
}
}
//1212这四段,每一段都可能不存在,所以34段结尾取max
cout << max(s3, s4);
return 0;
}