合唱团(牛客)

2023-05-16

题目描述:

计算最少出列多少位同学,使得剩下的同学排成合唱队形

说明:

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,   则他们的身高满足存在i(1<=i<=K)使得T1<T2<......<Ti-1<Ti>Ti+1>......>TK。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

请注意处理多组输入输出!

输入:整数N 和 N个学生各自的身高(整形)

8
186 186 150 200 160 130 197 200

输出:最少需要几位同学出列

4

解题思路:(来自谢小橙)

1. 对于题目,我个人理解是所有人都已经站好位,不能再改变位置了,只能从当中去掉人组成合唱队。同时,可以考虑中间的人两边没有人的情况(比如两头的两个人,或者这个人太矮周围的人都比他高的情况),但是这种情况基本被pass掉。    
2. 对于最长递增子序列:比如题中所给出的示例:186 186 150 200 160 130 197 200,先看每个人的左边可能出现最多的人。首先如果第一个数186在中间,左边没有数,就自己一个人,所以是1;第二个数186因为左边那个人跟他一边高,没有比他矮的了,所以也是1;第三个数150,左边的人都比他高,他如果是中间的话左边也他自己一个人,所以还是1;第四个数200,因为不能换位置,所以只能留186或者150,加上自己,就是2...最后再以197为例,左边保留150,160是左边人最多的情况,再加上自己,就是3。所以每个人左边人做多的情况(加上自己)就是(186)1 1 1 2 2 1 3 4(200)。
同理最长递减子序列:看一下每个人右边可能出现最多的人,这时我们从后往前看。200在最右面,所以自己一个人,是1;197最右面没有比他矮的,自己,是1...160左边一个比他矮的,所以算上自己是2,以此类推。所以每个人右边人做多的情况(加上自己)就是(186)3 3 2 3 2 1 1 1(200)     


3. 所以将上面最长递增和最长递减子序列的对应相加,就可以得到自己如果是中间的那个人,可以得到的最大的合唱队人数。当然,自己加了两遍,所以得减掉一个自己。


4.题目问的是最少去掉的人,所以最后的结果:    总人数 - 该数所在队列人数 = 需要出队的人数

最长递增子序列:(来自w8ed)

  • 定义如下符号

    n表示问题序列的总长度

    A[ 1:n ] 表示下标从1到 n 的一个问题序列,A[ i ]表示问题序列A[ 1:n ]中的第i个元素

    L[ 1 : n ]中的L~i~表示以A~i~结尾的最长递增子序列的长度

  • 由于问题的最优解必然对应着某个子序列,而这个子序列又必然由某个A~i~结尾,因此,由所有A~i~结尾的最长递增子序列的长度L~i~,构成了问题的解空间。max(L~i~)就是最优解
  • 求解L~i~的递归方程如下:

   

注意事项:

vector容器的就地逆置

#include<algorithm>
using namespace std;

int N;
cin >> N;
vector<int> Lds(N,1);  //设置长度为N,并且初试值全为1

reverse(Lds.begin(),Lds.end()); //实现就地逆置

 

AC代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void  getLcs(vector<int> height, vector<int> &Lcs)
{
	for(int i=0; i<height.size(); i++){
		int max = 0; 
		for(int j=0; j<i; j++){
			if( height[j]<height[i]&&Lcs[j]>max ){
				max = Lcs[j];
			}
		}
		Lcs[i] = max+1;
	}
} 

int main()
{
	int N; //总共有多少个人
	
	while( cin>>N ){
		vector<int> height(N);
		vector<int> Lcs(N);  //最长递增子序列 
		vector<int> Lds(N);  //最长递减子序列 
		
		for(int i=0; i<N; i++){
			cin >> height[i];
		}
		
		getLcs(height,Lcs);
		reverse(height.begin(),height.end());
		getLcs(height,Lds);
		reverse(Lds.begin(),Lds.end());
		
		int max = -1;
		for(int i=0; i<height.size(); i++){
			if( Lcs[i]+Lds[i]-1 > max ){
				max = Lcs[i]+Lds[i]-1;
			}
		}
		
		cout<<N-max<<endl;
	} 
	
	return 0;
} 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

合唱团(牛客) 的相关文章

  • 国内银行卡BIN号(Bank Identification Number)速查简表

    转载 xff1a https blog csdn net qq 37960324 article details 82981824 国内银行卡BIN号 Bank Identification Number 速查简表 银行名称 银行卡 卡BI
  • 判断一个对象是否为数组的4种方法

    问题描述 在js中判断数据类型通常使用typeof xff0c 但是typeof在判断数组和对象时的结果都是object console span class token punctuation span span class token
  • 去重三种方法

    数组去重三种方法 问题情境 去除数组中重复的元素 输出不重复的元素数组 思路方向 将数组中重复的元素删除将数组中不重复的元素取出利用其它 JavaScript 特性和 API 直接去重 这一思路中有些 API 涉及ES6中的某些知识暂不提及
  • 百度地图API简介

    百度地图API 简介 百度地图API是百度地图开放平台面向广大政府 企业 互联网等开发者开放的免费地图服务 拥有定位 地图 导航 轨迹 路况 路线规划 搜索 xff0c 七大基础地图服务能力 xff0c 并将七大服务能力开放给各行业开发者使
  • svg和canvas的区别简析

    Canvas和SVG是html5中支持2种可视化技术 xff0c 都是可以在画布上绘制图形和放入图片 下面来介绍和分析一下他们 一 Canvas 和 SVG 简介 1 什么是Canvas xff1f Canvas 是H5新出来的标签 Can
  • 微信小程序:实现长按扫描二维码

    小程序内置扫描二维码 image 使用小程序提供的image组件 xff0c image组件上有一个show menu by longpress的属性 xff0c 设置为true lt image show menu by longpres
  • 微信小程序:小程序常见问题及解决方案

    文章目录 原生组件显示在遮罩层上面的问题scroll view高度适配问题表单控件聚焦后页面上推问题小程序web view页面返回到小程序页面 原生组件显示在遮罩层上面的问题 在小程序中使用原生的表单组件时 xff0c 在有弹出框出现的情况
  • Echarts:惊艳的Map

    大家在网上看天气预报的时候应该就看到过在中国地图上显示不同省份的温度 xff0c 并根据温度的高低显示不同的颜色 xff0c 又或者看到各个省份的新冠肺炎新增人数 xff0c 根据不同的新增人数显示不同的颜色之类的图像 这些 xff0c 使
  • 微信小程序性能优化

    文章目录 小程序优化首屏加载优化白屏优化运行时性能渲染性能优化页面切换优化 小程序优化 首屏加载优化 删除无用代码 资源文件 开启按需加载组件 span class token comment app json span span clas
  • webStorage

    cookie 在webStorage出现之前在浏览器端存储数据通常使用cookie cookie是某些网站为了辨别用户身份 xff0c 进行Session跟踪而储存在用户本地终端上的数据 xff08 通常经过加密 xff09 xff0c 由
  • alembic 命令的使用

    初始化 alembic init alembic 查看历史head alembic span class token function history span span class token operator span span cla
  • centos 6 镜像源不再可用

    2020 12 02 centos 停止更新centos 6 xff0c 官网镜像源不可用 http mirror centos org centos 6 6 readme This directory and version of Cen
  • Linux安装配置vnc

    1 检测 vnc有没有安装 rpm qa grep tigervnc 或 rpm qa grep vnc 显示如下信息 xff0c 证明 vnc已经安装 1 1 若未安装 xff0c 安装步骤如下 1 1 1 cd 到 vnc 安装包目录下
  • shell变量的五种赋值方式

    shell变量的赋值https blog 51cto com u 14881361 2673174 一 直接赋值 格式为 xff1a 变量名 61 变量值 x1f416 直接赋值时禁止在 等号 61 两端添加空格 span class to
  • CommonJS和ES6模块化的区别

    ES6 模块与 CommonJS 模块存在以下差异 xff1a 1 语法上 CommonJS 使用的是 module exports 61 导出一个模块对象 xff0c require file path 引入模块对象 xff1b ES6使
  • bug解决: Cause: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 6; 不允许有匹配 “[xX][mM][lL]“ 的

    Exception encountered during context initialization span class token operator span cancelling refresh attempt span class
  • 云计算基础

    待到秋来九月八 xff0c 我花开后百花杀 数据中心发展阶段企业自建EDCIDC托管 租用云计算三者对比 云计算核心特征云计算参考模型云计算的关键特点按需服务资源池化弹性扩展泛网络访问服务可度量 云计算服务模式云计算技术架构云计算的4个部署
  • 前端npm或yarn装包踩坑——安装超时失败,设置镜像源不生效

    问题描述 xff1a 使用npm或yarn进行安装依赖包时 xff0c 无响应超时 xff0c 随即设置镜像源指向淘宝镜像 xff0c 但始终不生效 问题原因 xff1a 无响应 网络等原因 xff0c 导致npm或yarn装包失败 xff
  • Ubuntu中安装ClamAV防病毒软件

    环境 Ubuntu 16 04 软件安装 ClamAV http www clamav net documents installing clamav 源码链接 http www clamav net downloads productio
  • 使用Windows远程桌面工具来远程连接控制Ubuntu系统

    转载来源 xff1a 使用Windows远程桌面工具来远程连接控制Ubuntu系统 xff1a http www safebase cn article 258275 1 html 介绍 有时需要在实际的电脑上安装Ubuntu的操作系统来搭

随机推荐

  • 软件工程简答题和应用题

    1 简述软件工程过程的含义 目的以及包含的子过程 2 数据字典的作用是什么 xff0c 它有哪些条目 xff1f 3 简述结构化程序设计方法的基本要点 4 简述原型的开发步骤 5 什么是需求规约 xff1f 简述需求规约的基本性质 答 xf
  • MFC用对话框获取输入

    题目 在MFC调用对话框读入数据 xff0c 并在客户区输出 这是 计算机图形学基础教程 的一个习题 xff1a 使用MFC设计一个长方形类CRectangle xff0c 调用对话框读入长方形的长度和宽度 xff0c 在客户区输出长方形的
  • openssl 命令行 sm4 加解密

    sms4 算法标准数据实例 密钥 xff1a 0123456789abcdeffedcba9876543210 明文 xff1a 0123456789abcdeffedcba9876543210 密文 xff1a 681edf34d2069
  • 计算一个神经网络的输出(Computing a Neural Network's output)

    计算一个神经网络的输出 xff08 Computing a Neural Network s output xff09 Note 在编程实现一个神经网络的时候 xff0c 有一个注意点就是我们要记得保存每一步计算出来的 z z z 和 a
  • L2正则化(Regularization)

    正则化 xff08 Regularization xff09 深度学习可能存在过拟合问题 高方差 xff0c 有两个解决方法 xff0c 一个是正则化 xff0c 另一个是准备更多的数据 xff0c 这是非常可靠的方法 xff0c 但你可能
  • OpenCV--图像转化为灰度图、HSV图

    OpenCV 图像转化为灰度图 HSV图 一 灰度图 以下介绍转载自 xff1a https www cnblogs com xiejiulong p 3821620 html 图像灰度值的概念是什么 xff1f 灰度也可以认为是亮度 xf
  • python -- 定义函数 def 后面的 ->,:表示的含义

    python 定义函数 def 后面的 gt xff0c xff1a 表示的含义 gt 常常出现在python函数定义的函数名后面 xff0c 为函数添加元数据 描述函数返回的类型 表示参数的类型建议符 示例 xff1a span clas
  • 解决QT 编译QWebEngineWidgets出现错误Project ERROR: Unknown module(s) in QT: webenginewidgets问题

    解决QT 编译QWebEngineWidgets出现错误Project ERROR Unknown module s in QT webenginewidgets问题 1 确认你的QT版本号为QT5 4 43 xff0c 在此之后的版本Qt
  • C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别 xff0c 它们的初始化方式和普通数据类型的成员变量有所不同 这些特殊类型的数据类型包括 xff1a 引用 xff08 amp xff09 常量 xff08 const xff09 静态 xff08 stat
  • 自编码器(AutoEnconders:AE)解释

    概述 自编码器是一种能够通过无监督学习 xff0c 学到输入数据高效表示的神经网络 输入数据的这一高效表示 xff08 特征 xff09 称为编码 xff08 Codings xff09 xff0c 其维度一般远小于输入数据 xff0c 使
  • Model-Agnostic Meta-Learning (MAML)模型介绍及算法详解

    整理自 xff1a Frank Tian 回答 首先 xff0c 我们先从Meta Learning的概念说起 原始的机器学习的流程被认为是下面这这样的 xff1a 也就是我们根据我们先验知识设计网络架构和参数初始化方法 xff0c 从Tr
  • Django的STATIC_URL、STATIC_ROOT、STATICFILES_DIRS、MEDIA_URL、MEDIA_ROOT意义、设置和使用

    以下经验是在Django2 1 1及Python3 5环境下 xff08 项目目录结构见结尾 xff09 1 STATIC ROOT 首先 xff0c 要有Django的开发模式和部署模式的概念 xff08 目前知道有这种东西就行 xff0
  • CSDN的富文本编辑器的自动保存说明

  • powershell中 find 命令报参数格式不正确

    在cmd命令行中查看本地网络连接数 netstat ant find C 34 192 34 注意必须加上引号 xff0c 否则包参数格式不正确 同样的命令在powershell 重执行报参数格式不正确 因为在powershell中使用带双
  • 识别有效的IP地址和掩码进行分类统计(牛客)

    题目描述 xff1a 请解析IP地址和对应的掩码 xff0c 进行分类识别 要求按照A B C D E类地址归类 xff0c 不合法的地址和掩码单独归类 所有的IP地址划分为 A B C D E五类 A类地址1 0 0 0 126 255
  • 整数与IP地址间的转换(牛客)

    题目描述 xff1a 原理 xff1a ip地址的每段可以看成是一个0 255的整数 xff0c 把每段拆分成一个二进制形式组合起来 xff0c 然后把这个二进制数转变成 一个长整数 举例 xff1a 一个ip地址为10 0 3 193 每
  • C++中的qsort、sort排序

    注意 xff1a int char string之类的是可以之间使用 gt lt 61 61 之类的进行判断 xff0c char 类型的使用strcmp就行了 而struct与vector都可以当做数组进行处理 xff0c cmp函数传递
  • 迷宫问题(牛客)

    题目描述 xff1a 定义一个二维数组N M xff08 其中2 lt 61 N lt 61 10 2 lt 61 M lt 61 10 xff09 xff0c 如5 5数组下所示 xff1a int maze 5 5 61 0 1 0 0
  • 查找兄弟单词(牛客)

    题目描述 xff1a 兄弟单词 xff1a 给定一个单词X xff0c 如果通过任意交换单词中字母的位置得到的新的单词Y xff0c 那么称X和Y是兄弟单词 注意 xff1a bca和abc是兄弟单词 xff0c abc和abc是相同单词
  • 合唱团(牛客)

    题目描述 xff1a 计算最少出列多少位同学 xff0c 使得剩下的同学排成合唱队形 说明 xff1a N位同学站成一排 xff0c 音乐老师要请其中的 N K 位同学出列 xff0c 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种