洛谷1091 合唱队形_bit小兵的博客-程序员秘密

题目描述

N位同学站成一排,音乐老师要请其中的\((N-K)\)位同学出列,使得剩下的\(K\)位同学排成合唱队形。

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为\(1,3......,K\),他们的身高分别为\(T_1,T_2,......,T_K\)则他们的身高满足\(T_1<T_2<...<T_{i+1}>T_i>...T1\)\((1\leq i \leq K)\)

你的任务是,已知所有\(N\)位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入输出格式

输入格式

共二行。

第一行是一个整数\((2 \leq N \leq 100)\),表示同学的总数。

第二行有\(n\)个整数,用空格分隔,第\(i\)个整数\((130\leq i \leq 230)\)是第\(i\)位同学的身高(厘米)。

输出格式

一个整数,最少需要几位同学出列。

思路

因为我们知道这个合唱队形是一个山形,也就是在中间最高的人\(i\)左边是一个上升子序列,右边是下降子序列,又因为我们要求最少几人,即最长上升和最长下降子序列,于是代码就出来了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=100+5;
int n,a[maxn],f[maxn],q[maxn];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    a[0]=a[n+1]=0;
    for(int i=1;i<=n;i++)
        for(int j=0;j<i;j++)
            if(a[i]>a[j])
                f[i]=max(f[i],f[j]+1);  //最长上升子序列
    for(int i=n;i>=1;i--)
        for(int j=n+1;j>i;j--)
            if(a[i]>a[j])
                q[i]=max(q[i],q[j]+1);//最长下降子序列(注意:不能正着求,因为如果正着求就还需要一个循环枚举最高的人的位置)
    int ans=0;
    for(int i=1;i<=n;i++)
        ans=max(ans,f[i]+q[i]-1);//$ans$求最长的合唱队形,注意要减1
    cout<<n-ans;//答案
    return 0;
}

转载于:https://www.cnblogs.com/xzj213/p/11226601.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30814329/article/details/101654423

智能推荐

硅谷后台系统 Antd V4更新以及添加分类_SummerJay__的博客-程序员秘密

硅谷后台系统 Antd V4更新以及添加分类因为AntdV4的更新,有很多方法与功能都已经废弃;所以我的代码和视频源码有些许不同,又不懂的地方可以与我私信,或者查阅官方文档。很多有坑的地方我都做了详细的注释。1.1我们首先处理更新分类的组件,先修改你的UpdateForm.js中的代码import React, { Component } from 'react';import PropTypes from 'prop-types'import { Form, Input } from '

JAMstack:什么,为什么以及如何_culiu9261的博客-程序员秘密

When it comes to web development, there are different type of development stacks; the LAMP stack, the MEAN stack, the MERN stack etc. With the evolvement of modern web development, there is a new kid ...

第三章 MVC模式\项目和约定_crf_moonlight的博客-程序员秘密

在深入探究ASP.NET Core MVC的细节之前, 应当熟悉MVC设计模式及其思想, 以及它如何转化成ASP.NET Core MVC项目. 你可能已经了解了我在前面提到的一些观点和约定, 特别是在进行过高级ASP.NET开发的情况下. 如果没有的话, 建议详细阅读这一章, 对MVC原理的较好理解可以帮助你掌握ASP.NET Core MVC框架特性.MVC的历史术语MVC(model...

复合选择器_气死的笨喵的博客-程序员秘密

概念:所谓复合选择器,就是由两个或者多个基础选择器,通过不同的方式组合而成的。后代选择器概念:后代选择器又称为包含选择器。作用:用来选择元素或者元素组的子孙后代其语法:父级 子级{属性:属性值; 属性:属性值;}例如:.class h3{color:red; font-size:16px;}当标签发生嵌套时,内层标签就成为外层标签的后代;也就是说,父级标签能选择任何包含在内的标签。子元素选择器作用:子元素选择器都只能选择作为==子元素(亲儿子)==的元素。其写法就是把父级标签写在前面

随便推点

程序猿的健康之路_weixin_34138377的博客-程序员秘密

当我第一次听到加班的时候,其实我是是拒绝的,我对领导说我拒绝;领导说可以加工资,就这样我加了一个月的班之后,我的工资就DUANG的一下,上去了。之后我每个月都在加班,我也告诉我身边的朋友加班,白天不用怎么干活,晚上可以加班,周末可以加班,假期可以加班,之后工资就duang duang duang 的上去了;就这样我的加了几年的班之后,我的工资在duang duang duang的向上长,可...

Python 学习归纳_fract(a)_RichardLau_Cx的博客-程序员秘密

一. Anaconda 方面Windows 系统1. 虚拟环境的相关操作安装conda:在Windows系统下,只需要安装Anaconda,就可以直接实现conda功能。(note:Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。因为其包含了大量的科学包,所以可以带来许多的便利,其中的Conda也堪称包管理神器。)更换c...

UCOSIII总结------消息队列(6)_os_msg_qty_chenbinchao的博客-程序员秘密

这节总结操作系统UCOSIII的内核对象-------&gt;消息队列问题1 什么是消息队列消息队列是一个结构体其类型就是OS_Q typedef struct os_q OS_Q;展开看看结构体成员struct os_q { /* Message Queue /OS_OBJ_

Gradle各版本下载地址_gradle官网_zhangbijun1230的博客-程序员秘密

Gradle各版本下载地址 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanfengzqh/article/details/78184851Gradle各版本下载地址:http://services.gradle.org/distributions/ 我们下载都是all版本,里面包含了Gradle SDK的所有相关内容,包括:源码...

Linux下获取系统的IP,子网掩码,网关,MAC和配置文件的修改_tianmo2010的博客-程序员秘密

一 获取Linux平台下的配置参数,如IP,子网掩码,GateWay和Mac地址int GetComputerInfo(char *ip,char *zwym,char*brdaddr,char *mac){ /*socket参数设置*/ int sock; struct sockaddr_in sin; struct ifreq ifr; sock = socket(AF_INE

论海明威的存在主义宗教意识——存在主义虚无主义。注:部分观点个人不赞同..._djph26741的博客-程序员秘密

1. 引论 美国学者斯通贝克认为:“批评家的责任就在于从他的文学作品中找出宗教因素。”(邹溱1995:26)具体到海明威的宗教观,斯通贝克指出:“从海明威最初的作品到他最后的小说,无不具有宗教的基调和深刻的天主教根源,而迄今为止所有的海明威传记作家都忽略了这点,甚至连公认的海明威专家贝克也不例外。因为他们的传记都未能充分解释海明威的宗教倾向和精神生活。”(邹溱1998:1...

推荐文章

热门文章

相关标签