牛客网–合唱队形

牛客网–合唱队形

题目描述
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位同学的身高(厘米)。
输出描述:
可能包括多组测试数据,对于每组数据,
输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
示例1
输入
8
186 186 150 200 160 130 197 220
输出
4

关键就是找出一个人在从左到右处于第几个位置,从右到左处于第几个位置,然后相加减一就是队列里的人数,找出其中最大的,最少要去除的人数就可以得到了。

#include<bits/stdc++.h>
using namespace std;

int max(int a,int b)
{
    if(a>b) return a;
    else return b;
}
//left记录每个数从左边数是第几个数(按照大小顺序)
//right记录从右边数
int main(){
    int n;
    int stu[100];
    int left[100],right[100];
    while(scanf("%d",&n)!=EOF){
        for(int i=0;i<n;i++){
            cin>>stu[i]; //输入数据
        }
        for(int i=0;i<n;i++){//每个数 数的时候,算上本身
            left[i]=1;
            right[i]=1;
        }
        for(int i=1;i<n;i++){//从左往右,从第二个数开始,因为第一个数肯定就是从左开始的第一个
            for(int j=0;j<i;j++){//从头开始,看是否符合由小到大
                if(stu[i]>stu[j]){
                    left[i]=max(left[i],left[j]+1);
                }
            }
        }
        for(int i=n-2;i>=0;i--){
            for(int j=n-1;j>i;j--){
                if(stu[i]>stu[j]){
                   right[i]=max(right[i],right[j]+1);
                }
            }
        }
        int MAX=0;
        for(int i=0;i<n;i++){
            stu[i]=left[i]+right[i];
            MAX=max(MAX,stu[i]);
        }
        cout<<n-MAX+1<<endl;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100209.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 冒泡排序python实现_冒泡排序python代码优化

    冒泡排序python实现_冒泡排序python代码优化一、什么是冒泡排序冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻的元素可以交换,就表明完成了排序。一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相应位置在排序后不会发生改变。二、示例假设待排序序列为(5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:第一轮排序,此时整个序列中的元素都位于

    2022年10月15日
    2
  • Python练手项目之微信机器人、恢复被撤回的微信消息

    Python练手项目之微信机器人、恢复被撤回的微信消息一个python练习项目。基于图灵机器人的微信自动回复工具,对接itchat恢复被撤回的消息。【程序功能】1、实现微信单聊/群聊自动回复。2、恢复被撤回的微信消息(通过手机助手发送到手机微信)【GitHub项目地址】]https://github.com/Liiking/WechatTool(含:源代码及打包好的Mac和Windows桌面应用程序)【下载体验地址】哆啦猫Mac版,…

    2022年6月29日
    37
  • SSH批量更新getHibernateTemplate().bulkUpdate(hql)

    SSH批量更新getHibernateTemplate().bulkUpdate(hql)当用 getHibernate bulkUpdate hql 这个方法是会报错 org springframew jdbc Uncategorize Hibernateope couldnotexec uncategorize

    2025年10月22日
    2
  • 认识零拷贝[通俗易懂]

    认识零拷贝[通俗易懂]注意事项(1)零拷贝的含义是数据不从内核空间拷贝到用户空间,也不从用户空间拷贝到内核空间(2)零拷贝完全依赖操作系统,操作系统提供了就是提供了,没有提供就没有提供,java本身做不了任何事情传统的IO拷贝需求java读取磁盘上的文件,并且输出出去。这个过程包含两个步骤,一个是读,一个是写图片解读三列分别为用户空间、内核空间、硬件(1)read()syscall…

    2022年9月21日
    1
  • nginx报502修复日志

    nginx报502修复日志

    2021年10月29日
    52
  • 详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)

    详细图解什么叫平方探查法即二次探测再散列和线性探测再散列(数据结构 哈希函数 哈希冲突)虽然上文有提到怎么解释的开放地址法处理hash冲突,但是当时只是给了个简单的图,没有详细讲解一下,我当时有点不明白,回头查查资料,然后亲自动手,整理了一下。然后我就三幅图详细讲解一下:什么叫线性探测再散列;什么叫平方探测再散列(二次探测再散列);老师的ppt吧。给个原始数据如上图。下面详细解析。上面的是线性探测再散列。这个简单。

    2022年5月15日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号