题意:给出n个人的身高,让我们删除一些人,使得剩下的人的身高呈现“V(倒过来)”
思路:对每个位置分别枚举,每次枚举走两边最长上升子序列


1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e2+10; 4 int a[maxn]; 5 int dp[maxn]; 6 int main() 7 { 8 int n; 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++){ 11 scanf("%d",&a[i]); 12 } 13 int ans=1; 14 for(int i=1;i<=n;i++){ 15 for(int j=1;j<=i;j++){ 16 dp[j]=1; 17 for(int k=1;k<j;k++){ 18 if(a[j]>a[k]) dp[j]=max(dp[j],dp[k]+1); 19 } 20 } 21 int tmp1=dp[i]; 22 dp[i]=0; 23 for(int j=n;j>=i;j--){ 24 dp[j]=1; 25 for(int k=n;k>j;k--){ 26 if(a[j]>a[k]) dp[j]=max(dp[j],dp[k]+1); 27 } 28 } 29 int tmp2=dp[i]; 30 ans=max(ans,tmp1+tmp2-1); 31 // printf("ans:%d\n",ans); 32 } 33 printf("%d\n",n-ans); 34 return 0; 35 }