题解 | #合唱队形#

合唱队形

https://www.nowcoder.com/practice/cf209ca9ac994015b8caf5bf2cae5c98

#include <iostream>
using namespace std;
void longestIncrease(int a[],int l,int r){
    int n=r-l+1;
    if(n==0) return ;
    int d[n];int num=1;
    for(int i=l;i<r+1;i++){
        d[i]=1;
        for(int j=l;j<i;j++){
            if(a[j]<a[i]) {
                d[i]=max(d[i],d[j]+1);
            }
        }
        num=max(num,d[i]);
    }
    for(int i=l;i<r+1;i++) a[i]=d[i];
}
void longestDecrease(int a[],int l,int r){
    int n=r-l+1;
    int d[n];int num=1;
    for(int i=r;i>l-1;i--){
        d[i]=1;
        for(int j=r;j>i;j--){
            if(a[j]<a[i]) d[i]=max(d[i],d[j]+1);
        }
        num=max(num,d[i]);
    }
    for(int i=l;i<r+1;i++) a[i]=d[i];
}

int main() {
    int n;
    while(cin>>n){
        int a[n];
        int dp1[n];
        int dp2[n];
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
            dp1[i]=a[i];
            dp2[i]=a[i];
        }
        
        longestIncrease(dp1,0,n-1);
        longestDecrease(dp2,0,n-1);
        int maxh=1;
        for(int i=0;i<n;i++){
            if((dp1[i]+dp2[i])>maxh) maxh=dp1[i]+dp2[i];
        }
        cout<<(n-maxh+1)<<endl;
    }
}

全部评论

相关推荐

爱吃肉的伊登在写日记:好棒,27届简历能做成这个样子,但是第一个项目感觉cover住难度还是不小的,特别是二面的时候肯定要对分布式系统设计这一块儿有高出正常面试者的水平才行
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务