View Code of Problem 4064

#include<stdio.h>
//求两次最大上升子序列 
int main()
{
    int n,maxt;
    int t[200],a[200],b[200];
    scanf("%d", &n);
        for(int i=0;i<n;i++)
            scanf("%d", &t[i]);
        a[0]=1;
        b[n-1]=1;
        for(int i=1;i<n;i++){
            maxt=1;
            for(int j=0;j<i;j++){
                if(t[j]<t[i])
                    maxt=(maxt>a[j]+1)?maxt:a[j]+1;
            }
            a[i]=maxt;
        }
        for(int i=n-2;i>=0;i--){
            maxt=1;
            for(int j=n-1;j>i;j--){
                if(t[j]<t[i])
                    maxt=(maxt>b[j]+1)?maxt:b[j]+1;
            }
            b[i]=maxt;
        }
        int k=0;
        for(int i=0;i<n;i++)
            if(a[i]+b[i]-1>k)
               k=a[i]+b[i]-1;
        printf("%d\n", n-k);
    return 0;
}

Double click to view unformatted code.


Back to problem 4064