文章

37

粉丝

68

获赞

6

访问

7.1k

头像
1253 合唱队形
综合
发布于2024年3月22日 14:06
阅读数 175

#include <bits/stdc++.h>
using namespace std;
int n,a[105],dp_h[105],dp_t[105];
int main(){
    while(cin>>n){
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        //从前往后找以a[i]结尾的最长上升子序列,存入dp_h 
        for(int i=0;i<n;i++){
            dp_h[i]=1;
            for(int j=0;j<i;j++){
                if(a[j]<a[i]){
                    dp_h[i] = max(dp_h[j]+1,dp_h[i]);
                }
            }
        } 
        //从后往前找以a[i]结尾的最长上升子序列,存入dp_t 
        for(int i=n-1;i>=0;i--){
            dp_t[i]=1;
            for(int j=i+1;j<n;j++){
                if(a[j]<a[i]){
                    dp_t[i] = max(dp_t[j]+1,dp_t[i]);
                }
            }
        } 
        int maxn=0;
        for(int i=0;i<n;i++){
            maxn=max(maxn,dp_h[i]+dp_t[i]);
        }
        maxn=maxn-1;//a[i]前后都被计算了,多算了一次所以要减1 
        cout<<n-maxn<<endl; 
    }
    return 0;
}
 

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发