首页 > 其他分享 >P1091 合唱队形

P1091 合唱队形

时间:2022-12-24 20:01:44浏览次数:38  
标签:合唱队 int up down P1091 删去

P1091 合唱队形

题意:

给出一个长度为 \(n\) 的序列,要求从中删去一些数字,假设剩下的新的 \(a\) 数组,要求存在 \(a[1] < a[2] < ...<a[i] >a[i + 1] > ...a[k]\) 。求删去的数量最少是多少?

思路:

要求删去最少,其实变相就是求留下最多。

所以想到了求最长递增子序列,那么这道题就是求两次两个方向的最长递增子序列就可以了。

实现:

#include <bits/stdc++.h>
using namespace std;
const int N = 105;
int up[N], down[N];
int a[N];
int main()
{
    int n;
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
        scanf("%d", &a[i]);
    for (int i = 1; i <= n; i++)
    {
        up[i] = 1;
        for (int j = 1; j < i; j++)
        {
            if (a[i] > a[j])
                up[i] = max(up[i], up[j] + 1);
        }
    }

    for (int i = n; i >= 1; i--)
    {
        down[i] = 1;
        for (int j = n; j > i; j--)
        {
            if (a[i] > a[j])
                down[i] = max(down[i], down[j] + 1);
        }
    }
    int res = 1e9;
    for (int i = 1; i <= n; i++)
        res = min(res, n + 1 - up[i] - down[i]);
    printf("%d\n", res);
    return 0;
}

标签:合唱队,int,up,down,P1091,删去
From: https://www.cnblogs.com/zxr000/p/17003299.html

相关文章

  • P3205 [HNOI2010]合唱队
    P3205[HNOI2010]合唱队题目大意:一个排队方式,共\(n\)个人($n\leq1000$),如果当前人的身高大于前一个,那么将这个人排在前一个人右边,如果当前人身高小于前一个人,那么......
  • P3205 [HNOI2010]合唱队
    思路我们用\(f_{i,j,0}\)表示当前\([i,j]\)的人都已经入队了,并且\(i\)是从左边进的(\(0\)),或\(j\)是从右边进的(\(1\))。具体细节见代码。代码#include<iostream>#includ......
  • #yyds干货盘点# 动态规划专题:合唱队形
    1.简述:描述N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高......
  • dp4 合唱队形
    地址:http://bailian.openjudge.cn/practice/2711/最长上升子序列的板子#include<bits/stdc++.h>usingnamespacestd;constintN=1010;intn;inta[N];intres;......
  • 2022/8/18 动态规划复习(内含Caesar's Legions,数字游戏,合唱队形,The Battle of Chibi,Que
    QueriesforNumberofPalindromes标签:回文类区间dp 一道典型的区间dp。注意求的是个数而不是长度。初始化的时候注意一下,len=2时分两种情况。ch[i]=ch[i-1]时,dp[i-......