题解 | #合唱队形#

合唱队形

https://www.nowcoder.com/practice/0045cd3e39634a66ada63c2adeb49234

从右往左 求最大递增子序列 从左往右求最大递增子序列

合并在一起 去除中间同学 得到山丘型的序列答案

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N = 1010;
int a[N], f[N], g[N];

int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i ++) cin >> a[i];
    for(int i = 0; i < n; i ++){
        f[i] = 1;
        for(int j = 0; j < i; j ++){
            // 递增
            if(a[i] > a[j]) f[i] = max(f[i], f[j] + 1);
        }
    }

    // 从右往左求最大上升子序列 也就是最大递减序列的长度
    for(int i = n - 1; i >= 0; i --){
        g[i] = 1;
        for(int j = n - 1; j > i; j --){
            if(a[i] > a[j]) g[i] = max(g[i], g[j] + 1);
        }
    }

    int res = 0;
    // f[i]是以i为终点的最大上升子序列 g[i]是以i为起点的递减子序列
    for(int i = 0; i < n; i ++) res = max(res, f[i] + g[i] - 1);

    res = n - res;
    cout << res;
}

全部评论

相关推荐

点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务