好不容易想到从左往右求一次LIS,再从右往左求一次LIS,然后就不断wa,看了discuss,才知道并不是总是相邻的相加 #include<iostream> using namespace std; #define N 1005 double p[N]; int lef[N],rig[N]; int main() { int n,i,temp,j; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%lf",p+i); lef[1]=1; for(i=2;i<=n;i++) { temp=0; for(j=1;j<i;j++) if(p[j]<p[i]&&lef[j]>temp) temp=lef[j]; lef[i]=temp+1; } rig[n]=1; for(i=n-1;i>=1;i--) { temp=0; for(j=n;j>i;j--) if(p[j]<p[i]&&rig[j]>temp) temp=rig[j]; rig[i]=temp+1; } for(i=1;i<n;i++) for(j=n;j>i;j--) if(lef[i]+rig[j]>temp) temp=lef[i]+rig[j]; printf("%d/n",n-temp); return 0; }