zoukankan      html  css  js  c++  java
  • NOIP 2004 合唱队形

    洛谷 P1091 合唱队形

    https://www.luogu.org/problemnew/show/P1091

    JDOJ 1271: [NOIP2004]合唱队形 T3

    https://neooj.com/oldoj/problem.php?id=1271

    题目描述

    NN位同学站成一排,音乐老师要请其中的(N-KNK)位同学出列,使得剩下的KK位同学排成合唱队形。

    合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,,K,他们的身高分别为T_1,T_2,…,T_KT1,T2,,TK, 则他们的身高满足T_1<...<T_i>T_{i+1}>…>T_K(1 le i le K)T1<...<Ti>Ti+1>>TK(1iK)。

    你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

    输入输出格式

    输入格式:

    共二行。

    第一行是一个整数N(2 le N le 100)N(2N100),表示同学的总数。

    第二行有nn个整数,用空格分隔,第ii个整数T_i(130 le T_i le 230)Ti(130Ti230)是第ii位同学的身高(厘米)。

    输出格式:

    一个整数,最少需要几位同学出列。

    输入输出样例

    输入样例#1: 复制
    8
    186 186 150 200 160 130 197 220
    
    输出样例#1: 复制
    4
    

    说明

    对于50%的数据,保证有n le 20n20;

    对于全部的数据,保证有n le 100n100。

    动态规划基础题,需要有求最长不降子序列的基础,然后思路就比较好想了。

    我们先预处理两个数组,一个从前往后存以i结尾的最长不下降序列长度,一个从后往前存以i结尾的最长不上升序列长度。

    最后枚举每个人当“山峰”,求出最长序列即可。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int t[110],a[110],b[110];
    int n,ans;
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&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[j]+1>a[i])
                    a[i]=a[j]+1;
            }
        }
        for(int i=n;i>=1;i--)
        {
            b[i]=1;
            for(int j=n;j>i;j--)
            {
                if(t[i]>t[j] && b[j]+1>b[i])
                    b[i]=b[j]+1;
            }
        }
        for(int i=1;i<=n;i++)
        {
            if(b[i]+a[i]-1>ans)
                ans=a[i]+b[i]-1;
        }
        printf("%d",n-ans);
        return 0;
    }
  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11236300.html
Copyright © 2011-2022 走看看