动态规划之合唱队形

动态规划__合唱队形问题 问题描述      N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。   合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,  则他们的身高满足T1Ti+1>…>TK(1      输入格式 Input Format      输入的第一行是一个整数N(2      输出格式 Output F 阅读详情

题目

P1091 [NOIP2004 提高组] 合唱队形
这道题的题意就是最少需要移除几个同学才能做到同学们的身高满足一个"三角形的序列"(即左半边严格单调上升,右半边严格单调下降);我们可以思考一下 最少 需要移除几个同学,那不就是找最长的一个严格上升的序列嘛,那不就是 分别求左边最长上升子序列和右边的最长上升子序列嘛 ;这样就很好解决了;

代码细节

// web:https://www.luogu.com.cn/problem/P1091
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<ll, ll> PLL;
const int N = 1e5 + 10;
const int INF = 1e9;
const ll INFL = 1e18;
int n;

signed main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n;
    vector<int> a(n + 1), z(n + 1, 1), y(n + 1, 1);
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    // 求左边的最长上升子序列;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j < i; j++)
            if (a[j] < a[i])
                z[i] = max(z[i], z[j] + 1);
	// 求右边的最长下降子序列;
    for (int i = n; i >= 1; i--)
        for (int j = n; i < j; j--)
            if (a[j] < a[i])
                y[i] = max(y[i], y[j] + 1);

    int res = 0;
    // 因为这个包含了两个a[i]所以要减掉一个
    for (int i = 1; i <= n; i++)
        res = max(res, z[i] + y[i] - 1);
    // res求出来的是最长子序列,所以要n - res求出最少移除几个人;
    cout << n - res;

    return 0;
}

总结

其实这道题和最长上升子序列和导弹拦截这类题目都有一个共同点:就是要求一个最长的单调序列,这个序列可能是严格单调也可能不是,但最后都是单调,所以最后可以转化成一道线性dp的模版题–> 最长上升子序列 ,就是两个循环嵌套就解决了;

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

相关推荐

动态规划试题:合唱队形

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

程序人生 2469

动态规划dp--------合唱队形

输入的第一行是一个整数 N(2≤N≤100),表示同学的总数。第二行有n个整数,用空格分隔,第 i 个整数Ti(130≤Ti≤230)是第i位同学的身高(厘米)。你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。N位同学站成一排,音乐老师要请其中的(N−K)位同学出列使得剩下的K位同学排成合唱队形。题目是要一个有尖的“数列” 所以有个数很大 并且是要尖前面的位置成上升 后面的位置成下降。//i为终点的最长上升子序列 以n为起点 以i为终点的最长上升子序列。

KissBoat的博客 1592

动态规划算法初步(4)——合唱队形

动态规划算法初步(4) 例题三:合唱队形 (NOIP 2004)(线性型) 题目: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K 位同学从左到右依次编号为1,2,……,K,他们的身高分别为T1,T2,……,Tk,则他们的身高满足T1&amp;amp;amp;lt;T2&amp;amp;amp;lt;……Ti,Ti&amp;amp;amp;gt;Ti+1&amp;amp;amp;gt;……&

小哼007的博客 1251

AcWing 482. 合唱队形【动态规划】【线性DP】【最长上升子序列】

动态规划 线性DP 最长上升子序列

Derrickhang的博客 415

第九章 动态规划-1264:【例9.8】合唱队形

1264:【例9.8】合唱队形 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6636 通过数: 3248 【题目描述】 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K,他们的身高分别为T1,T2,…,TK,则他们的身高满足T1<T...

zqhf123的博客 1281

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2921

洛谷线性动态规划训练(2)动态规划组合状态:P1091 合唱队形——上升序列与下降结合

P1091 合唱队形 题解 输入输出样例 输入 #1复制 8 186 186 150 200 160 130 197 220 输出 #1复制 4 分析 这个题目还是很有意思的,因为它并不是直接给出了动态规划的方程,而是类似于最大子列和的方法。 在最大子列和中,我们的定义是dp[i]:以nums[i]为结尾的最大子列和,然后基于最后一步的连续性和dp[i-1]结合进行求解。 在最长升序序列中,我...

qq_35299223的博客 274

STM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发

系列文章目录 一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 文章目录系列文章目录前言一、配置CubeMX二、逻辑代码部分 前言 这次我用的板子是一个用STM32F103C8T6作为主控芯片的一个数据采集卡,两个LED灯连接的引脚是PB3与PB4,TX与RX引脚分别是PA9和PA10。 一、配置CubeMX 1、新建工程; 2、配置时钟源,在RCC里面的HSE配置的是晶振时钟; 3、配置程序烧录引脚SYS为SWD模式; 4、配置GPIO口,配置一个LE

遗忘丶的博客 1万+

以洛谷P1091 合唱队形初探动态规划DP

目录 一 题目描述 二 题目拆解 三 子问题求解 Q1:如何求dpup[i]——删除元素数最小的递增子序列 Q2:如何求dpdown[i]——删除元素数最小的递减子序列 四 AC代码 一 题目描述 P1091 [NOIP2004 提高组] 合唱队形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 入门果然耗时间,一道简单的DP却花了我两三个小时 ...

明月千里赴迢遥的博客 612

工业相机图像格式深度解析:从Mono8到Mono12的选型与应用

本文深度解析工业相机黑白图像格式,重点对比Mono8、Mono10与Mono12的核心差异。文章从位深、动态范围和数据量等关键概念切入,详细阐述了不同格式的优缺点及适用场景,为工业视觉项目中的相机选型提供实战指南,帮助用户在精度、速度与成本间做出最优决策。

weixin_29207439的博客 262

YOLOv13结合Sobel边缘检测算子,实现EIEM(Edge Information Enhancement Module,边缘信息增强模块),强化空间特征提取

EIEM模块通过巧妙地结合Sobel边缘检测算子和现代卷积网络架构,实现了显式边缘信息增强的创新设计。这种方法不仅提高了网络对边缘特征的敏感性,还保持了良好的计算效率和模块化特性。 从技术实现角度看,EIEM展示了如何将经典计算机视觉算法无缝集成到深度学习框架中,为构建更强大、更可解释的视觉模型提供了新的思路。随着对边缘信息重要性认识的不断深入,以及对网络可解释性需求的增长,EIEM这样的显式特征增强模块将在未来的计算机视觉研究中发挥越来越重要的作用。

FJN110的博客 906

动态规划-最长递增子序列-合唱队形

动态规划-最长递增子序列-合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<… .<Ti 》Ti+1>…>TK(1<=i<=K)。 你的任务是,已知所有N位同学的身高...

jindayue的博客 490

基于Simulink的伺服电机位置闭环控制仿真

本文带你从零构建了伺服电机位置闭环控制系统​ 的完整Simulink仿真模型,实现了:✅ 搭建PMSM伺服电机、逆变器、机械臂负载的主电路与编码器反馈模型;✅ 用MATLAB Function实现三环控制(位置环PID、坐标变换、电流环PI);✅ 验证阶跃定位(稳态误差0.002°、响应0.08s)与正弦跟踪(误差0.008°)的高性能;✅ 对比开环控制,明确位置闭环在精度、响应、抗扰上的优势;✅ 理解“三环嵌套+反馈校正”的核心思想(精密定位的工程实现)。核心收获。

amy_mhd的博客 173

【动态规划T】合唱队形

【问题描述】 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个整

Woo~ 1382

神经进化实践:用遗传算法替代反向传播优化神经网络

神经进化用来定义应用于深度学习的特定优化模式。在本节中,我们通过遗传算法优化简单深度学习网络的权重/参数,替换在误差反向传播训练过程中的所用优化器。

盼小辉丶的博客 3615

手把手教你学Simulink——基于经典滤波器设计的场景:低通滤波器(LPF)的设计与频率响应仿真

滤波器是信号处理领域中非常重要的组件,用于去除不需要的频率成分或者提取有用的频率信息。低通滤波器(Low-Pass Filter, LPF)允许低于某个特定截止频率的信号通过,同时衰减高于该截止频率的信号。在本教程中,我们将学习如何使用设计一个简单的模拟低通滤波器,并对其频率响应进行仿真分析。本文介绍了如何使用设计一个简单的模拟低通滤波器,并通过仿真展示了其应用效果。通过这样的实践,您不仅能够加深对滤波器工作原理的理解,还能掌握利用Simulink进行滤波器设计与仿真的基本技能。

MHD0815的博客 5720

动态规划:合唱队形

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

July_xunle的博客 1168

代谢组数据分析(二十四):基于tidymass包从质谱原始数据到代谢物注释结果的实践指南

本教程介绍了如何使用 R 语言中的 tidymass 包进行代谢组学数据分析。tidymass 是一个专为液相色谱-质谱(LC-MS)数据设计的开源工具,提供从数据准备到统计分析的全流程支持。教程详细讲解了数据准备、数据处理、数据探索、数据清洗、代谢物注释、统计分析及结果输出的步骤。用户需准备 MS1、MS2 数据和样本信息表,并通过 tidymass 进行峰识别、峰分组、保留时间校正等操作。数据处理后,用户可进行数据探索、清洗和代谢物注释,最终通过统计分析发现潜在的生物标志物,并输出结果。教程还提供了代码

专注生信领域 1635

NOIP 2004 合唱队形【动态规划】

题目链接 题目描述 NN 位同学站成一排,音乐老师要请其中的( N-KN−K )位同学出列,使得剩下的 KK 位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为 1,2,…,K1,2,…,K ,他们的身高分别为T1,T2,…,TK , 则他们的身高满足T1&amp;amp;amp;amp;lt;…Ti+1&amp;amp;amp;amp;gt;…&amp;amp;amp;amp;gt;TK(1≤i≤K) 。 你的任务是,已知所有N位同学的身高,

破旧的手枪の博客 773

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Codeup动态规划专题总结:合唱队形

问题 C: 合唱队形 时间限制:1 Sec内存限制:32 MB 提交:175解决:86 [提交][状态][讨论版][命题人:外部导入] 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK, 则...

nanke_4869的博客 422

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

(每日一题)合唱队形———<动态规划>

【代码】(每日一题)合唱队形———<动态规划>

2301_79580018的博客 309

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

动态规划--合唱队形

题目大概: 一行数字要求从两边到中间依次增大,问给出的一行数字要去掉多少才能形成这种数列。 思路: 可以任选一个做中间数k,从1到n。 然后求第一个数到k的最长上升子序列的长度la,再求最后一个数到k的最长上升子序列的长度lb。 最后n-(la+la-1)就是去掉的数字个数,减一是因为多算了一个k。 感想: 有些题需要几个简单的算法混合使用或者重复使用。 代码: #inclu

a1046765624的博客 669
上一篇: 01背包变种之完全装满问题
下一篇: P4310 绝世好题(带位运算的DP)题解
ResCells
博客等级 码龄4年 191粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值