【NOIP提高组】合唱队形

devtools/2024/11/8 11:18:29/

NOIP提高组】合唱队形


💐The Begin💐点点关注,收藏不迷路💐

N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<…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

提示

【数据规模】
对于50%的数据,保证有n<=20;
对于全部的数据,保证有n<=100。

C语言

#include <stdio.h>#define MAX_STUDENTS 105int main() {int heights[MAX_STUDENTS]; // 存储同学身高的数组,简称heightsint leftIncreasing[MAX_STUDENTS]; // 记录从左往右每个位置左边递增序列长度,简称leftIncreasingint rightDecreasing[MAX_STUDENTS]; // 记录从右往左每个位置右边递减序列长度,简称rightDecreasingint chorusSizes[MAX_STUDENTS]; // 记录每个位置左右序列合并后的合唱队形大小,简称chorusSizesint numStudents; // 同学的总数,简称numStudentsint maxChorusSize; // 最大的合唱队形大小,简称maxChorusSize// 读取同学总数scanf("%d", &numStudents);// 读取每位同学的身高,并初始化相关数组for (int i = 1; i <= numStudents; i++) {scanf("%d", &heights[i]); // 读取第i位同学的身高并存入heights数组,简称i为同学序号leftIncreasing[i] = 1;rightDecreasing[i] = 1;}// 从右往左,按左高右低顺序找出每一个位置右边有几个从高到低的数(包括自己)for (int i = numStudents - 1; i >= 1; i--) {for (int j = i + 1; j <= numStudents; j++) {if (heights[i] > heights[j] && leftIncreasing[i] <= leftIncreasing[j] + 1) {leftIncreasing[i] = leftIncreasing[j] + 1;}}}// 从左往右,按左低右高顺序找出每一个位置左边有几个从低到高的数(包括自己)for (int i = 2; i <= numStudents; i++) {for (int j = 1; j < i; j++) {if (heights[i] > heights[j] && rightDecreasing[i] <= rightDecreasing[j] + 1) {rightDecreasing[i] = rightDecreasing[j] + 1;}}}maxChorusSize = 0;// 计算每个位置左右序列合并后的合唱队形大小,并找出最大的合唱队形大小for (int i = 1; i <= numStudents; i++) {chorusSizes[i] = leftIncreasing[i] + rightDecreasing[i] - 1;// 注意!自己加了两次要 -1if (chorusSizes[i] > maxChorusSize) {maxChorusSize = chorusSizes[i];}}// 输出最少需要出列的同学数printf("%d\n", numStudents - maxChorusSize);return 0;
}

Java

import java.util.Scanner;public class Main {public static final int MAX_STUDENTS = 105;public static void main(String[] args) {int[] heights = new int[MAX_STUDENTS]; // 存储同学身高的数组,简称heightsint[] leftIncreasing = new int[MAX_STUDENTS]; // 记录从左往右每个位置左边递增序列长度,简称leftIncreasingint[] rightDecreasing = new int[MAX_STUDENTS]; // 记录从右往左每个位置右边递减序列长度,简称rightDecreasingint[] chorusSizes = new int[MAX_STUDENTS]; // 记录每个位置左右序列合并后的合唱队形大小,简称chorusSizesint numStudents; // 同学的总数,简称numStudentsint maxChorusSize; // 最大的合唱队形大小,简称maxChorusSizeScanner scanner = new Scanner(System.in);// 读取同学总数numStudents = scanner.nextInt();// 读取每位同学的身高,并初始化相关数组for (int i = 1; i <= numStudents; i++) {heights[i] = scanner.nextInt(); // 读取第i位同学的身高并存入heights数组,简称i为同学序号leftIncreasing[i] = 1;rightDecreasing[i] = 1;}// 从右往左,按左高右低顺序找出每一个位置右边有几个从高到低的数(包括自己)for (int i = numStudents - 1; i >= 1; i--) {for (int j = i + 1; j <= numStudents; j++) {if (heights[i] > heights[j] && leftIncreasing[i] <= leftIncreasing[j] + 1) {leftIncreasing[i] = leftIncreasing[j] + 1;}}}// 从左往右,按左低右高顺序找出每一个位置左边有几个从低到高的数(包括自己)for (int i = 2; i <= numStudents; i++) {for (int j = 1; j < i; j++) {if (heights[i] > heights[j] && rightDecreasing[i] <= rightDecreasing[j] + 1) {rightDecreasing[i] = rightDecreasing[j] + 1;}}}maxChorusSize = 0;// 计算每个位置左右序列合并后的合唱队形大小,并找出最大的合唱队形大小for (int i = 1; i <= numStudents; i++) {chorusSizes[i] = leftIncreasing[i] + rightDecreasing[i] - 1;// 注意!自己加了两次要 -1if (chorusSizes[i] > maxChorusSize) {maxChorusSize = chorusSizes[i];}}// 输出最少需要出列的同学数System.out.println(numStudents - maxChorusSize);scanner.close();}
}

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

http://www.ppmy.cn/devtools/132295.html

相关文章

LeetCode :150. 逆波兰表达式求值(含求后缀表达式和中缀转后缀表达式)

目录 题目描述: 代码: 拓展: 中缀表达式转后缀表达式代码: 题目描述: 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数…

adb 命令查看设备存储占用情况

有时会要用adb 命令查看设备存储占用情况。 一般使用df、du 命令去排查。但要注意 adb shell 和linux中的命令参数是有些区别的。 可以通过du --help 看支持哪些参数。 下面是在Android 下测试成功的指令。 首先df 查看整体占用分布情况。 假设要排查/data 目录下的文件占用…

Python网络爬虫:入门与实战

Python网络爬虫&#xff1a;入门与实战 引言 在当今信息爆炸的时代&#xff0c;如何从海量的互联网数据中提取有价值的信息&#xff0c;成为了许多开发者和数据分析师面临的重要课题。网络爬虫&#xff08;Web Crawler&#xff09;作为一种自动化工具&#xff0c;能够按照预…

大数据治理:构建数据驱动的智能未来

一、引言 背景介绍 随着信息技术的快速发展和互联网的普及&#xff0c;大数据已经成为现代社会的重要资产。企业和组织通过收集和分析大量数据来优化决策、提高效率和创新能力。然而&#xff0c;数据的快速增长也带来了一系列挑战&#xff0c;如数据质量、数据安全和隐私保护等…

CAA 二次开发 —— 创建批处理应用

本文使用批处理方式连接 3DE 服务器创建会话来简单介绍批处理应用的创建方法。 目录 1、创建步骤&#xff08;Step-by-Step&#xff09; 1.1 新建 Module 1.2 新建 Class 1.3 编写 Class 源文件 1.4 添加模块和框架依赖 1.5 编译运行 1、创建步骤&#xff08;Step-…

【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】

在 Kubernetes 中&#xff0c;Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃&#xff0c;Kubernetes 尝试重启该容器&#xff0c;但由于持续崩溃&#xff0c;重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …

基于SSM+微信小程序的社团登录管理系统(社团1)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 2、项目技术 3、开发环境 4、功能介绍 1、项目介绍 基于SSM微信小程序的社团登录管理系统实现了管理员及社团、用户。 1、管理员实现了首页、用户管理、社团管理、社团信息管理、社…

MySQL 8.0在windows环境安装及配置

文章目录 一、下载二、安装三、配置环境变量 一、下载 1、先彻底卸载之前的MySQL&#xff0c;并清理其 残留文件 。 2、登录网址https://www.mysql.com/ 3、点击网址左下角“中文”按钮&#xff0c;切换到中文界面 4、点击网页上方的“下载”按钮&#xff0c;然后点击网页…