首页 > 其他分享 >P1091 [NOIP2004 提高组] 合唱队形

P1091 [NOIP2004 提高组] 合唱队形

时间:2024-10-19 14:11:15浏览次数:1  
标签:NOIP2004 合唱队 int long P1091 include define

分析题目知道求一个最长上升子序列和一个最长下降子序列的长度均为同一个起点的最长的长度。于是求

点击查看代码
#include <iostream>
#include <stack>
#include <cmath>
#include <algorithm>
#include <set>
#include <vector>
#include <climits>
#include <string.h>
#include <map>
#include <queue>
#include <list>
#include <cmath>
#include <iomanip> 
#define int long long 
#define ios ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define lc u<<1
#define rc u<<1|1
#define gcd __gcd
#define double long double
#define endl "\n"
#define INF LLONG_MAX
#define mod  998244353 
#define N 105
const double PI = 3.14159265358979323846;
using namespace std;
int n, t[N], a[N], b[N];//分别表示以该数结尾最长子序列的长度
signed main()
{
    ios;
    int n; cin >> n;
    for (int i = 1; i <= n; i++)cin >> t[i];
    for (int i = 1; i <= n; i++)
    {
        a[i] = 1;
        for (int j = 1; j < i; j++)
        {
            if (t[i] > t[j])a[i] = max(a[i], a[j] + 1);
            else continue;
        }
    }
    for (int i = n; i >=1; i--)
    {
        b[i] = 1;
        for (int j = n; j > i; j--)
        {
            if (t[i] > t[j])b[i] = max(b[i], b[j] + 1);
            else continue;
        }
    }
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        //cout << a[i] << " " << b[i] << endl;
        ans = max(a[i] + b[i] - 1, ans);
    }
    cout << n - ans << endl;
    return 0;
}

标签:NOIP2004,合唱队,int,long,P1091,include,define
From: https://www.cnblogs.com/youyong1/p/18475819

相关文章

  • 【堆】【优先队列】[NOIP2004]合并果子
    https://ac.nowcoder.com/acm/contest/22669/I堆的用法Type:队列中存储元素的类型。例如int,double,pair<int,int>等。Container:底层存储数据的容器类型,默认为vector,但可以换成deque或其他容器。Compare:比较函数,用于决定优先级顺序。默认是less,表示最大堆。如果使用......
  • 南沙C++信奥老师解一本通题 1264:【例9.8】合唱队形
    ​ 【题目描述】N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形。合唱队形是指这样的一种队形:设KK位同学从左到右依次编号为1,2,…,K1,2,…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<T2<…<Ti,Ti>Ti+1>…>TK(1≤i≤K)你的任务是,......
  • P1091 [NOIP2004 提高组] 合唱队形
    [NOIP2004提高组]合唱队形题目描述$n$位同学站成一排,音乐老师要请其中的$n-k$位同学出列,使得剩下的$k$位同学排成合唱队形。合唱队形是指这样的一种队形:设$k$位同学从左到右依次编号为$1,2,$…$,k$,他们的身高分别为$t_1,t_2,$…$,t_k$,则他们的身高满足$t_1<\c......
  • P1087 [NOIP2004 普及组] FBI 树
    大家好!下面为大家讲解我做了两年半的题目,[NOIP2004普及组]FBI树题目描述我们可以把由0和1组成的字符串分为三类:全0串称为B串,全1串称为I串,既含0又含1的串则称为F串。FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为......
  • Solution - Luogu P10918 小分图最大匹配
    首先考虑连边的情况。可以把\(a_i\)拆成\(\gcd(a_i,m)\times\frac{a_i}{\gcd(a_i,m)}\),因为\(\gcd(\frac{a_i}{\gcd(a_i,m)},m)=1\),所以与\(a_i\)有连边的\(j\)一定满足\(j\bmod\gcd(a_i,m)=0\)。于是就可以把\(c_{a_i}\)放到\(c_{\gcd(a_i,m)}\),左部点......
  • P1091 [NOIP2004 提高组] 合唱队形
    这道题主要考察的是线性dp,最基础的dp,这道题的主要思路1.求出最大子序列,2.求出最小子序列,3.找出最少要多少个人要出列。其实我们主要2可以变成逆序查找最大子序列,所以我们只需要把前两个找出来之后我们就可以求出主要3(注意一定要减1,因为中间的那个同学一定会被多算一次所以必......
  • [NOIP2004 提高组] 虫食算(含代码)
    [NOIP2004提高组]虫食算题目描述所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的数字。来看一个简单的例子:43#9865#045......
  • 【c++提高组】津津的储蓄计划(NOIP2004)
    题目描述津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 20%还给津津。因此津津制定了一个储蓄计划:每个月的......
  • CSP历年复赛题-P1087 [NOIP2004 普及组] FBI 树
    原题链接:https://www.luogu.com.cn/problem/P1087题意解读:字符串作为根,左边一半作为左子树,右边一半作为右子树,递归构造数,并按FBI规则输出后续遍历结果。解题思路:按照题意,通过dfs来构造树,对于字符串str,提取左边一半递归构造左子树,提取右边一半递归构造右子树,前提是字符串长度>1......
  • CSP历年复赛题-P1085 [NOIP2004 普及组] 不高兴的津津
    原题链接:https://www.luogu.com.cn/problem/P1085题意解读:找到两数之和大于8且两数之和最大值的位置解题思路:不多说,送分题,直接模拟法即可100分代码:#include<bits/stdc++.h>usingnamespacestd;inta,b;intmaxx,maxn;intmain(){for(inti=1;i<=7;i++)......