//从前向后走一遍动态规划计算严格升序序列,从后向前走一遍计算严格升序序列。 //最后再遍历一遍其两者和最大的数,然后拿总数减去就是答案。 #include <bits/stdc++.h> using namespace std; const int maxn = 100+10; int N; int a[maxn]; int dp_zuo[maxn]; int dp_you[maxn]; int main() { cin>>N; for (int i=1;i<=N;i++) { cin>>a[i]; } for (int i=1;i<=N;i++) { dp_zuo[i] = 1; for (int j=1;j<i;j++) { if (a[i]>a[j]) { dp_zuo[i] = max(dp_zuo[i], dp_zuo[j]+1); } } } for (int i=N;i>=1;i--) { dp_you[i] = 1; for (int j=i+1;j<=N;j++) { if (a[i]>a[j]) { dp_you[i] = max(dp_you[i], dp_you[j]+1); } } } int max_people = 0; for (int i=1;i<=N;i++) { max_people = max(max_people, dp_zuo[i]+dp_you[i]-1); } cout<<N-max_people; return 0; }