#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.