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

P1091 合唱队形

时间:2023-02-13 20:26:07浏览次数:37  
标签:合唱队 int num P1091 序列 最长 dp

题意:有n名学生在成一排。然后为了站成中间高两边矮的合唱队列,问最少 不要几个人?

 

思路:

就是最长上升子序列裸用。当然是先把顺方向和逆方向的最长上升子序列找到。

然后再枚举从哪里分,顺方向和逆方向的最长上升子序列的长度之和最长。

其实蛮简单

代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
int n, num[105];
int dp[2][105];
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> num[i];
    for (int i = 1; i <= n; i++)
    for (int i = 1; i <= n;++i)
    for (int j = 0; j < i; ++j)if (num[i] > num[j]) dp[0][i] = max(dp[0][i], dp[0][j] + 1);
    //j从0开始,就不用开始给dp赋值为1
    for (int i = n; i >= 1;--i)
    for (int j = n + 1; j > i; --j)if (num[i] > num[j])dp[1][i] = max(dp[1][i], dp[1][j] + 1);
    
    int ans = 0;
    for (int i = 1; i <= n; ++i)
        ans = max(dp[0][i] + dp[1][i] - 1, ans);
    cout << n - ans << endl;
}

 

标签:合唱队,int,num,P1091,序列,最长,dp
From: https://www.cnblogs.com/ALINGMAOMAO/p/17117683.html

相关文章

  • P1091 合唱队形
    P1091合唱队形题意:给出一个长度为\(n\)的序列,要求从中删去一些数字,假设剩下的新的\(a\)数组,要求存在\(a[1]<a[2]<...<a[i]>a[i+1]>...a[k]\)。求删去的......
  • 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-......