AcWing 482. 合唱队形

2023-11-12

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

合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TKT1,T2,…,TK,  则他们的身高满足T1<…<Ti>Ti+1>…>TK(1≤i≤K)。     

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

输入格式

输入的第一行是一个整数N,表示同学的总数。

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

输出格式

输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。

数据范围

2≤N≤100,
130≤Ti≤230

输入样例:

8
186 186 150 200 160 130 197 220

输出样例:

4

思路:枚举每个点作为Ti,求T0-Ti最长上升子序列长度len1和Tn-Ti的最长上升子序列长度len2 ,ans=min(n-len1-len2-1,ans)  (LIS最长上升子序列问题朴素算法O(n^2),使用二分的话可以把复杂度降到O(nlogn))

#include<iostream>
#include<algorithm>
#include<vector>
#include<memory.h>
using namespace std;
int n;
int f[110],num[110];
int main(){
    cin>>n;
    int ans=231;
    memset(f,0,sizeof f);
    memset(num,0,sizeof num);
    for(int i=0;i<n;i++) cin>>f[i];
    for(int i=0;i<n;i++){
        for(int j=0;j<i;j++){
            if(f[j]<f[i]){
                num[j]=1;
                for(int k=0;k<j;k++){
                    if(f[k]<f[j] && num[k]+1>num[j]){
                        num[j]=num[k]+1;
                    }
                }
            }
        }
        int len1=0;
        for(int p=0;p<i;p++){len1=max(len1,num[p]);}
         memset(num,0,sizeof num);
        for(int j=n-1;j>i;j--){
            if(f[j]<f[i]){
                num[j]=1;
                for(int k=n;k>j;k--){
                    if(f[k]<f[j] && num[k]+1>num[j]){
                        num[j]=num[k]+1;
                    }
                }
            }
        }
        int len2=0;
        for(int p=n-1;p>i;p--){len2=max(len2,num[p]);}
        ans=min(ans,n-len1-len2-1);
        //cout<<ans<<endl;
    }
    cout<<ans;
    return 0;
}

 简洁的代码如下 y总yyds:

#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;

int n;
int w[N];
int f[N], g[N];

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i ++ ) cin >> w[i];

    for (int i = 1; i <= n; i ++ )
    {
        f[i] = 1;
        for (int j = 1; j < i; j ++ )
            if (w[i] > w[j])
                f[i] = max(f[i], f[j] + 1);
    }

    for (int i = n; i; i -- )
    {
        g[i] = 1;
        for (int j = n; j > i; j -- )
            if (w[i] > w[j])
                g[i] = max(g[i], g[j] + 1);
    }

    int res = 0;
    for (int k = 1; k <= n; k ++ ) res = max(res, f[k] + g[k] - 1);

    cout << n - res << endl;

    return 0;
}

 

 

 

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

AcWing 482. 合唱队形 的相关文章

  • uni-app 框架超详细新手入门

    什么是uni app 介绍 uni app 是一个使用 Vue js 开发跨平台应用的前端框架 开发者通过编写 Vue js 代码 uni app 将其编译到iOS Android 微信小程序等多个平台 保证其正确运行并达到优秀体验 uni
  • 公网远程访问宝塔面板和网页【内网穿透】

    1 ngrok 限制带宽 不限制流量 进入ngrok官网 Sunny Ngrok内网转发内网穿透 国内内网映射服务器 1 注册 2 开通隧道 3 穿透网页 1 配置ngrok 输入网页本地地址和端口号 2 运行ngrok sunny cli
  • IntelliJ IDEA下载安装教程(超详细图解)

    1 IDEA的下载 官网链接 https www jetbrains com idea l 1 点击上面链接进入官网 点击Developer Tools 再点击 Intellij IDEA 2 点击Download 进入IDEA下载界面 3
  • Vue:数据双向绑定和v-系列指令

    Vue js是当下最火的一款前端框架了 学习的时候要多动手实践以帮助理解 我是通过例子来学习的 这样记的快一些 目录 Vue js介绍 如何引入Vue 何为声明式渲染 如何实现 文本插值 message v html v bind 绑定元素
  • 数组的添加和删除过滤方法总结es6 filter()

    es6 filter 数组过滤方法总结 Array every x gt x 是每一个都要满足 Array some x gt x 是有一个满足 Array find findIndex 返回符合条件的第一个值 Array filter 过
  • C语言,文件定位问题详解

    最近在完成上机题碰到文件操作 要求能够修改某一行的数据 关于这个问题 我们自然就会想到用fseek来定位然后修改这一行的内容 可是问题就来了 具体啥问题请往下看 比如说text txt的内容为 这时我想把第二内容改为24 很明显用fseek
  • union关键字,理解-应用场景-优点

    C语言共用体 C语言union用法 详解 biancheng net 理解为 需求场景 某变量可具有多重身份 然而在使用某变量时 它只能确定为其中一种身份 union关键字 这种好处是 既可以满足需求 又可以不浪费内存 union关键字创建
  • Spring MVC 起步

    一 MVC 首先http的请求到达前端控制器 前端知道具体的请求 将代理给到控制器 控制器了解具体的业务细节 因此调用业务逻辑 生成业务数据 并将业务数据返回给前端控制器 然后前端控制器将数据分发给我们的业务视图 由业务视图来呈现业务页面返
  • JS对于字符串的切割截取

    1 slice start end 方法 start 起始索引 开始位置 end 终止索引 结束位置 如果某个参数为负 则从字符串的结尾开始计数 如果省略第二个参数 则该方法将裁剪字符串的剩余部分 var str Apple Banana
  • Hash 函数及其重要性

    不时会爆出网站的服务器和数据库被盗取 考虑到这点 就要确保用户一些敏感数据 例如密码 的安全性 今天 我们要学的是 hash 背后的基础知识 以及如何用它来保护你的 web 应用的密码 申明 密码学是非常复杂的一门学科 我不是这方面的专家
  • 如何在 Python 中开始机器学习?(小白必看)

    其实学习机器学习的最好方法是设计和完成小项目 Python 是一种流行且功能强大的解释型语言 与 R 不同 Python 是一种完整的语言和平台 可用于研究和开发以及开发生产系统 还有很多模块和库可供选择 提供多种方式来完成每项任务 开始使
  • INTERNALERROR> AttributeError: ‘CollectReport‘ object has no attribute ‘description‘问题解决

    隔一段时间没写脚本 今天又写新的脚本 写完之后执行报错 INTERNALERROR gt AttributeError CollectReport object has no attribute description 执行了下之前写的脚本
  • adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)

    import math import numpy as np import matplotlib pyplot as plt RATIO 3 椭圆的长宽比 LIMIT 1 2 图像的坐标轴范围 class PlotComparaison o
  • 在分页式管理方式下实现主存空间的分配和回收

    转自 在分页式管理方式下采用位示图来表示主存分配情况 实现主存空间的分配和回收 呱呱乐编程 CSDN博客 方便学习 如有侵权 联系本人 立即删除 include
  • 5e服务器信息被拦截,5e登陆csgo总被拦截什么意思(5e进csgo提示被拦截)

    办法1 验证游戏完整性重启steam 2 重启计算机 3 可能是系统兼容性问题win10 64 建议更换系统 4 到游戏目录里用管理员身份启动试试 希望能够帮助你 望采纳 好像是进程里有多个steam客户端进程 或者你5e配置的游戏路径不对

随机推荐

  • Vue使用AntV/G2例子

  • vue项目文件导入导出的方法总结

    文件导入 点击文件上传时点击按钮的结构 用element ui组件的el upload组件 点击时的方法需要传入一个file文件的参数下来 按钮结构
  • vue3全局引入element-plus后使用 Message 消息提示

    import ElementPlus from element plus const app createApp App app use ElementPlus mount app 使用confirm的方式 proxy confirm
  • 毕业设计-基于深度学习的实例分割研究

    目录 前言 课题背景和意义 实现技术思路 一 实例分割研究现状 二 实例分割的特殊应用 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学
  • Python爬取头像网站图片

    import urllib request from urllib import request from bs4 import BeautifulSoup x 1 url https www woyaogexing com touxian
  • Spring SringMVC之配置文件配置学习

    废话不多说 先来一个web项目web xml实际例子 web xml
  • 学习如何使用github

    转载自 http www open open com lib view open1396580186465 html 以提交的一次开源代码为例 教会你步入开源的世界 1 首先登陆到https github com平台上注册一个自己的账号 这
  • [图像处理]YUV图像处理入门3

    5 yuv420格式的灰阶测试图 本程序中的函数主要是为YUV420P视频数据流的第一帧图像添加边框 函数的代码如下所示 file 5 yuv graybar cpp author luohen brief gray scale bar o
  • 【云原生之Docker实战】容器的资源限制使用方法

    云原生之Docker实战 容器的资源限制使用方法 一 容器资源限制介绍 二 检查本地Docker状态 三 查看本地容器系统相关文件 1 查看容器配置目录 2 查看内存相关文件 3 查看cpu相关文件 四 容器内存资源的限制 1 查看内存限制
  • Linux下Shell脚本编程简介

    最近经常使用Linux 感觉太频繁地敲击键盘有些累了 于是想到了Shell脚本 可以把太多的命令写成一个脚本 这样每次执行一遍sh文件 就可以省去了敲击键盘的时间 还可以保护键盘哦 于是在网上搜了一些有关Linux下脚本编程的内容 Shel
  • Spring Data MongoDB 更新整个对象

    第一步 在pom xml文件中引入下述依赖 当前Spring Boot的版本为 2 7 6
  • 益聚星荣:一文看懂,为什么有的投资人讨厌元宇宙,有的却爱死它了

    元宇宙里没有新东西 或许十年之后 它就会成为未来的互联网 在我们身边无处不在 再一次 周鸿祎对热潮中的科技新概念表达了不看好 11月20日 周鸿祎做客央视 对话 节目时 直言元宇宙 代表着人类的没落 在他的理解中 元宇宙的一切东西都还是虚幻
  • VS2019下OpenCV3.4.9的环境搭建

    VS2019下OpenCV3 4 9的环境搭建 目录 VS2019下OpenCV3 4 9的环境搭建 1 首先下载OpenCV3 4 9 2 配置环境变量 1 修改用户变量 2 修改系统变量 3 新建VS工程并进行设置 1 设置包含目录 2
  • 如何查看服务器端屏蔽的网站,服务器怎么查看和屏蔽端口号

    服务器怎么查看和屏蔽端口号 内容精选 换一换 Linux云服务器一般采用SSH连接方式 使用密钥对进行安全地无密码访问 但是SSH连接一般都是字符界面 有时我们需要使用图形界面进行一些复杂操作 本文以Ubuntu 18 04操作系统为例 介
  • Makefile 与 GCC G++ 入门

    Makefile和g 学习笔记 g 部分 学习C和C 的同学应该都知道 gcc是一款跨平台的C C 编译器 可以在Linux Windows平台下使用 具有十分强大的功能 结构也十分灵活 并且可以通过不同的前端模块来支持各种语言 如Java
  • HTTPS详细总结

    最近学习htpps 下面来总结一下 以下内容多来源于网上 出错不详了 仅仅当做自己做笔记用 HTTPS详解 很多人可能不能很好的理解HTTPS 不能理解为什么HTTPS的代码要那样写 因此我写了这片博客 希望能让更多人了解HTTPS 密码
  • java Excel文件上传 解析入库

    ApiOperation 上传文件 RequestMapping value uploadFile method RequestMethod POST public BusinessResult uploadFile RequestPara
  • 贪心算法之背包问题

    贪心算法之背包问题 背包问题是算法的经典问题 分为部分背包和0 1背包 主要区别如下 部分背包 某件物品是一堆 可以带走其一部分 0 1背包 对于某件物品 要么被带走 选择了它 要么不被带走 没有选择它 不存在只带走一部分的情况 部分背包问
  • Linux下的命令学习--dd命令

    Linux dd 命令用于读取 转换并输出数据 dd 可从标准输入或文件中读取数据 根据指定的格式来转换数据 再输出到文件 设备或标准输出 使用方法 dd if xx of xx bs xx count xx skip xx seek xx
  • AcWing 482. 合唱队形

    N位同学站成一排 音乐老师要请其中的 N K 位同学出列 使得剩下的K位同学排成合唱队形 合唱队形是指这样的一种队形 设K位同学从左到右依次编号为1 2 K 他们的身高分别为T1 T2 TKT1 T2 TK 则他们的身高满足T1 lt