482. 合唱队形

题目描述

求数组中最少去掉多少个元素,可以让剩下的队形保持为^的形状?

f1-计算数组+枚举峰值+计算最小出列值

基本分析

  1. 是登山的简单变形

代码

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

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

int n;

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i ++) scanf("%d", &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 ans = n;
    for (int i = 0; i < n; i++)
        ans = min(ans, n - f[i] - g[i] + 1);
        
    printf("%d\n", ans);
    
    return 0;
}

总结

  1. 暂无
posted @ 2023-03-29 17:40  zhangk1988  阅读(19)  评论(0)    收藏  举报