题目描述
大概描述  由1,2,3构成一个乱序序列  每次可以改变里面的数字使得它最后变成递增或递减的样子 问最少改变多少个数字 
1<n<30000
解题思路: 对于已经连续的就不用改  所以问题转化为求最大的递增或递减数;
AC代码:
#include<iostream>
usingnamespacestd;
intn,i,j,a,x,y,u[4]={0,0,0,0},d[4]={0,0,0,0},z=0;
intmain(){
    cin>>n;
    for(i=0;i<n;i++){
        cin>>a;
        x=0;
        y=0;
        for(j=1;j<=3;j++){
            if(a>=j)x=max(x,u[j]+1); //记录前面最大的序列
            if(a<=j)y=max(y,d[j]+1);
        }
        u[a]=max(x,u[a]);
        d[a]=max(y,d[a]);
    }
    for(i=1;i<=3;i++){
        z=max(z,u[i]);
        z=max(z,d[i]);
    }
    n-=z;
    cout<<n<<endl;
    return0;
}