当时比老师写的少,于是不听老师方法了,导致我很长不会做这种题

发布于:2023-10-08 ⋅ 阅读:(141) ⋅ 点赞:(0)

include<iostream>//P1091 [NOIP2004 提高组] 合唱队形
using namespace std;
const int N = 30;
int f[N],dp[N],ans[N],p[N];
int a,c;
int main(){
    cin>>a;
    for(int i=1;i<a;i++) cin>>p[i];
    for(int b=1;b<a;b++){
    for(int i=1;i<=b;i++) f[i]=p[i];
    for(int i=1;i<=a-b-1;i++) dp[i]=p[i];
    ans[b]=0;
    for(int i=1;i<b;i++){
        if(f[i]>f[i+1]){
            ans[b]++;
        }
        if(dp[i]<dp[i+1]){
            ans[b]++;
        }
    }
}
    for(int i=1;i<a;i++){
        if(ans[i]<ans[i+1]){
            c=ans[i+1];
        }
    }
    cout<<c<<endl;
    return 0;
}

//#include <iostream>
//#include <algorithm>
//using namespace std;
//const int N=160;
//int n;
//int a[N],f[N],g[N];// f[i] 表示以i下表结尾的最长上升子序列的长度为 f[i]
//
//
//int main() {
//    cin>>n;
//    for (int i = 1; i <= n; ++i) {
//        cin>>a[i];
//    }
//    
//    for (int i = 1; i <= n; ++i) {
//        f[i]=1;
//        for (int j = 1; j < i; ++j) {
//            if(a[j]<a[i]){
//                f[i]=max(f[i],f[j]+1);
//            }
//        }
//    }
//    
//    for (int i = n; i > 0; --i) {
//        g[i]=1;
//        for (int j = n; j > i; --j) {
//            if(a[j]<a[i]){
//                g[i]=max(g[i],g[j]+1);
//            }
//        }
//    }
//    int ans=0;
//    for (int i = 1; i <= n; ++i) {
//        ans=max(ans,f[i]+g[i]-1);
//    }
//    cout<<n-ans<<endl;
//    return 0;
//}

本文含有隐藏内容,请 开通VIP 后查看