zoukankan      html  css  js  c++  java
  • 编程百炼:合唱队形

    合唱队形

    题目链接http://bailian.openjudge.cn/practice/2711/
    总时间限制:1000ms  内存限制: 65536kB
    描述
    N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。
    合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , Ti > Ti+1 > … > TK (1 <= i <= K)。
    你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
    输入
    输入的第一行是一个整数N(2 <= N <= 100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130 <= Ti <= 230)是第i位同学的身高(厘米)。
    输出
    输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
    样例输入
    8
    186 186 150 200 160 130 197 220
    
    样例输出
    4
    来源
    2005~2006医学部计算概论期末考试
    选中队列中的一个学生,以该学生为核心,分别求出其左侧的最长递增子序列和其右侧的最长递减子序列,两者相加减去1就是以该同学为中心的合唱队的人数,所以我们只需要把每个学生都作为中心遍历一遍,就能得出人数最多的合唱队形,再把总人数减去合唱人数就是需要剔除的人数。
     1 #include <iostream>
     2 #include <cstdio>
     3 #define MAX_NUM 105
     4 using namespace std;
     5  
     6 int main()
     7 {
     8     int high[MAX_NUM], left[MAX_NUM], right[MAX_NUM], n;
     9     scanf("%d", &n);
    10     for(int i = 0; i < n; i++)
    11         scanf("%d", &high[i]);
    12     for(int i = 0; i < n; i++)
    13     {
    14         left[i] = 1;
    15         for(int j = 0;j < i; j++)
    16         {
    17             if(high[j] <high[i] && left[j] > left[i] - 1)   // 找出左边最长递增子序列
    18                 left[i] = left[j] + 1;
    19         }
    20     }
    21     for(int i = n-1; i >= 0; i--)
    22     {
    23         right[i] = 1;
    24         for(int j = n-1;j > i; j--)
    25         {
    26             if(high[j] < high[i] && right[j] > right[i] - 1)  // 找出右边最长递减子序列
    27                 right[i] = right[j] + 1;
    28         }
    29     }
    30     int max = 0;
    31     for(int i = 0; i < n; i++)
    32     {
    33         if(max < left[i] + right[i] - 1)
    34             max = left[i] + right[i] - 1;  // 寻找最多合唱人数
    35     }
    36     printf("%d
    ",n - max);  
    37     return 0;
    38 }
  • 相关阅读:
    JavaScript函数节流与函数去抖
    AngularJS 中文资料+工具+库+Demo 大搜集
    一个意想不到的Javascript内存泄漏
    mac添加Chromedriver
    selenium3+python自动化1——input标签上传文件
    python笔记1——xml文件的创建,读写,与增删改查
    C# 单例模式
    java的byte数组转换成在[0,255]范围内
    【转载】Stack Overflow: The Architecture
    C# 号码归属地查询算法(根据Android来电归属地二进制文件查询修改)
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/11837986.html
Copyright © 2011-2022 走看看