交错序列

来源:互联网 发布:腾讯微信数据报告 编辑:程序博客网 时间:2024/05/01 02:20

题目描述

我们定义一个由数字 0 和 1 组成的序列是交错序列,当且仅当在这个序列中 0 和 1 是轮流出现的,比如 0,010,10101都是交错序列。

现在给出了一个由数字 0 和 1 组成的序列A,它可能不是一个交错序列,但是你可以从这个序列中选择一些数字出来,按他们在序列A中原有的相对顺序排列(即选取A的一个子序列),使得最后你得到的是一个交错序列。问这样能得到的交错序列的最长长度是多少?


输入

第一行包含一个整数n,表示输入序列的长度。1 <= n <= 10^5

第二行包含n个 0 或 1,表示对应的序列。

输出

输出能够得到的最长交错序列的长度。


样例输入

Input Sample 1:

3

0 1 0

Input Sample 2:

8

1 1 0 0 1 1 0 0

样例输出

Output Sample 1:

3

Output Sample 2:

4


分析

我们要注意的是第二个输出的是 4,不要简单地选取子序列。

代码

#include <stdio.h>int main(){    int i;    int n;    scanf("%d", &n);    int input[n];    for (i = 0; i < n; i ++)    {        scanf("%d", &input[i]);    }        int temp = input[0];    int num = 1,maxnum = 0;    for (i = 1; i < n; i++)    {        if(input[i] != temp)        {            num++;            temp = input[i];        }        else        {            continue;        }        if (num > maxnum)        {            maxnum = num;        }    }    printf("%d ", maxnum);    return 0;}