牛客网–合唱队形

牛客网–合唱队形

题目描述
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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS7查看和关闭防火墙

    CentOS7.0默认使用的是firewall作为防火墙查看防火墙状态firewall-cmd–state停止firewallsystemctlstopfirewalld.service禁止firewall开机启动systemctldisablefirewalld.service转自:CentOS6和CentOS7防火墙的关闭关闭se…

    2022年4月4日
    39
  • 数据运营系列(二):如何用合成控制法判断策略实施效果

    数据运营系列(二):如何用合成控制法判断策略实施效果1.合成控制法合成控制法最开始是经济学家用来研究评估某个政策实施在某国家或地区的效果,原理即是反事实框架,假想该地区没有受政策干预会怎样,并与事实上受到干预的结果做对比。二者之差即为“…

    2022年5月2日
    96
  • 原型模式的应用场景_原型化开发方法

    原型模式的应用场景_原型化开发方法ProtoType 原型模式动机模型定义实例结构要点总结笔记动机在软件系统中,经常面临着”某些结构复杂的对象“的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口如何应对这种变化?如何向”客户程序“(使用这些对象的程序)”隔离出“这些易变对象,从而使得”依赖这些易变对象的客户程序“不随着需求变化而变化?模型定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新对象。实例和工厂模型用的同一个实例工厂模式//工厂class SplitterF

    2022年8月9日
    1
  • bat启动命令行_cmd打开bat文件

    bat启动命令行_cmd打开bat文件写了个win环境本地启动的java项目,又不想每次去win+R再开启powershell(win10环境)所以百度了一下bat脚本参考了大佬的文章:https://www.cnblogs.com/LiuYanYGZ/p/12078984.html只需要简单的命令就可以了:startcmd/kechoHello,World!##执行完毕以后,新开的窗…

    2022年9月23日
    0
  • mysql 锁表详解

    mysql 锁表详解为了给高并发情况下的MySQL进行更好的优化,有必要了解一下mysql查询更新时的锁表机制。一、概述MySQL有三种锁的级别:页级、表级、行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-levellocking);BDB存储引擎采用的是页面锁(page-levellocking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-levellocki

    2022年6月3日
    100
  • 无锁队列实现原理_优先队列 java

    无锁队列实现原理_优先队列 java首次接触无锁数据结构的设计,请各位大佬多多指教~~~CAS(Compare&&Swap)原子操作CAS是无锁(lockfree)的数据结构的基础。用伪代码描述:input:reg,old_val,new_val/*是old_val,reg替换为new_val,返回为true;否则返回为false*/if(*reg==old_val){*reg==new…

    2022年10月21日
    0

发表回复

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

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