NC16664 [NOIP2004]合唱队形
题目
题目描述
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为 \(T_1,T_2,…,T_K\), 则他们的身高满足\(T_1<...<T_i>T_i+1>…>T_K(1<=i<=K)\)。
你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。
输入描述
输入的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。
输出描述
输出包括一行,这一行只包含一个整数,就是最少需要几位同学出列。
示例1
输入
8
186 186 150 200 160 130 197 220
输出
4
备注
对于50%的数据,保证有n<=20;
对于全部的数据,保证有n<=100。
题解
知识点:线性dp。
显然是LIS的变种,对同一个点求从左到右的LIS和从右到左的LIS即可。
设 \(dp[i]\) 为以 \(i\) 结尾的LIS长度。有转移方程:
\]
时间复杂度 \(O(n^2)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
using namespace std;
int h[107], dp1[107], dp2[107];
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> h[i];
for (int i = 1;i <= n;i++) {
for (int j = 0;j < i;j++)
if (h[j] < h[i]) dp1[i] = max(dp1[i], dp1[j] + 1);
}
for (int i = n;i >= 1;i--) {
dp2[i] = 1;
for (int j = n + 1;j > i;j--)
if (h[j] < h[i]) dp2[i] = max(dp2[i], dp2[j] + 1);
}
int ans = ~(1 << 31);
for (int i = 1;i <= n;i++)
ans = min(ans, n - dp1[i] - dp2[i] + 1);
cout << ans << '\n';
return 0;
}
NC16664 [NOIP2004]合唱队形的更多相关文章
- NOIP 2004 合唱队形
洛谷 P1091 合唱队形 https://www.luogu.org/problemnew/show/P1091 JDOJ 1271: [NOIP2004]合唱队形 T3 https://neooj ...
- [NOIP2004] 提高组 洛谷P1091 合唱队形
题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2, ...
- 【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]
以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...
- P1091 [NOIP2004 提高组] 合唱队形
题目描述 $N$位同学站成一排,音乐老师要请其中的$\left ( N-K\right )$位同学出列,使得剩下的$K$位同学排成合唱队形. 合唱队形是指这样的一种队形:设$K$位同学从左到右依次编号 ...
- TYVJ P1067 合唱队形 Label:上升子序列?
背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号 ...
- tyvj 1067 合唱队形 dp LIS
P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N ...
- 合唱队形2(洛谷U5874)
题目背景 上次老师挑出来的(N-K)位同学很不高兴,于是他们准备自己组建合唱队形.他们请了kkk来帮忙. 题目描述 他们安排了一个动作--手拉着手唱一首歌(就是他们围成一个圈).如果有两个相邻的同学的 ...
- 合唱队形2 洛谷U5874
题目背景 上次老师挑出来的(N-K)位同学很不高兴,于是他们准备自己组建合唱队形.他们请了kkk来帮忙. 题目描述 他们安排了一个动作——手拉着手唱一首歌(就是他们围成一个圈).如果有两个相邻的同学的 ...
- NOIP200407合唱队形+最长上升子序列O(n^2)详解
合唱队形解题报告 2016-05-12 4:30——6:45 NOIP200407合唱队形 难度级别:A: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:20000 ...
- NOIP2004 合唱队列
三.合唱队形 (chorus.pas/dpr/c/cpp) [问题描述] N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位 ...
随机推荐
- Java 如何将Excel转换为TXT文本格式
TXT文件是一种非常简单.通用且易于处理的文本格式.在处理大规模数据时,将Excel转为TXT纯文本文件可以提高处理效率.此外,许多编程语言和数据处理工具都有内置的函数和库来读取和处理TXT文件,因此 ...
- 基于python+django的电影搜索网站-搜索引擎系统设计与实现
该项目是基于python的web类库django开发的一套web网站,给师弟做的课程设计. 本人的研究方向是一项关于搜索的研究项目.在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索 ...
- 笔记本也能飞:运行chat大模型
背景 在过去的一年,ChatGPT的崛起彻底改变了我们与AI的交互方式.它不再是被动的信息提供者,而是成为了一个可以与我们自由交流.分享知识的伙伴.无论是生活中的琐事,还是工作中的难题,ChatGPT ...
- java - 标准类的定义
一个标准的类需要拥有下面 4个 组成部分: 1. 所有的成员变量都要使用 private 关键字进行修饰 2. 为每一个成员变量编写 set.get 方法 3. 创建一个无参数的构造方法 4. 创建一 ...
- [转帖]SecurityProtocolType 枚举
https://learn.microsoft.com/zh-cn/dotnet/api/system.net.securityprotocoltype?view=net-8.0 命名空间: Syst ...
- [转帖]linux audit审计(8)--开启audit对系统性能的影响
https://www.cnblogs.com/xingmuxin/p/8875783.html 我们使用测试性能的工具,unixbench,它有一下几项测试项目: Execl Throughput ...
- [转帖]基于Fuse的用户态文件系统性能优化几点建议
https://zhuanlan.zhihu.com/p/68085075 目前很多文件系统基于Fuse( http://fuse.sourceforge.net/ )开发,在较为深入钻研Fuse实现 ...
- Oracle 核心列信息查看与处理
Oracle 核心列信息查看与处理 背景 最近想对数据库表进行跨数据之间的比照 因为有一些自增列或者是时间戳的列不需要进行对比 后者是对比容易导致失真. 所以就准备选用其他方式进行一下处理. 本文主要 ...
- [转帖]Linux中的用户和用户组
https://www.jianshu.com/p/76700505cac4 1,Linux中的用户分类 超级用户:拥有对系统的最高管理权限,默认是root用户. 普通用户:只能对自己目录下的文件进行 ...
- pytest-xdist分布式
使用pytest框架运行每条case的时候,都是上一条运行结束才会运行下一条,要是有成千上百条case 且每条运行2s那就是2*总条数,会浪费大量的时间和人力.为了节约时间和人力成本,pytest提供 ...