博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【?】【9907】合唱队形
阅读量:4458 次
发布时间:2019-06-08

本文共 1519 字,大约阅读时间需要 5 分钟。

Time Limit: 10 second

Memory Limit: 2 MB

问题描述

n位同学站成一排,音乐老师要请其中的(n-k)位同学出列,使得剩下的k位同学排成合唱队形。合唱队形是指这样的一种队形:设k位同学从左到由一次编号为1,2….k,他们的身高分别为t1,t2,…,tk,则他们的身高满足t1 <t2 < … < ti> ti+1 > … > tk; (1≤i≤k). 已知所有n位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

Input

第一行是一个整数n(2≤n≤100),表示同学的总数。第二行有n个整数,用空格分隔,第i个整数ti(130≤ti≤230)是第i为同学的身高(厘米)。

Output

一个数据,就是最少需要即为同学出列

Sample Input

8

186 186 150 200 160 130 197 220
Sample Output

4

Sample Input1

10

130 130 174 130 185 230 206 219 210 173

Sample Output1

3

【题目链接】:

【题解】

从左到右进行一次最长上升子序列的DP;
从右到左进行一次最长上升子序列的DP;
求出从左到右;以某个数字结尾的最长上升子序列的长度:
求出从右到左;以某个数字结尾的最长上升子序列的长度;
然后枚举站在中间的那个人的位置再在哪里;
因为它的左边的人数和它的右边的人数都是固定的了;
所以可以直接获取答案了;
处理出在队伍里面的人的人数最大值是多少;
用n减去这个最大值就是剩下的最少的人了;
ps:五中平台不能用bits/stdc++.h这个挂
【完整代码】

#include 
#include
#include
using namespace std;const int MAXN = 200;int n,a[MAXN],l[MAXN],r[MAXN];int main(){ scanf("%d",&n); for (int i = 1;i <= n;i++) scanf("%d",&a[i]); for (int i = 1;i <= n;i++) { l[i] = 1; for (int j = 1;j <= i-1;j++) if (a[j] < a[i]) l[i] = max(l[i],l[j]+1); } for (int i = n;i >= 1;i--) { r[i] = 1; for (int j = n;j >= i+1;j--) if (a[j] < a[i]) r[i] = max(r[i],r[j]+1); } int stay = 0; for (int mid = 1;mid <= n;mid++) { int tes = l[mid]+r[mid]-1; stay = max(stay,tes); } int out = n-stay; cout << out << endl; return 0;}

转载于:https://www.cnblogs.com/AWCXV/p/7632060.html

你可能感兴趣的文章
运算符重载
查看>>
SDWebImage 新版接口使用方法
查看>>
DataTable导出为word,excel,html,csv,pdf,.txt
查看>>
android ListView详解
查看>>
软件工程 第一次作业
查看>>
Content Server HA搭建
查看>>
vue-textarea 自适应高度
查看>>
(2)数据结构——线性表(链表)实现
查看>>
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
sqlserver打开对象资源管理器管理的帮助文档的快捷键
查看>>
JBOSSAS 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
java运行时内存分类
查看>>
为什么说 Git 比 SVN 更好
查看>>
1.基础数据类型的初识 字符串 bool 整型 if else elif
查看>>
【设计模式】4、原型模式
查看>>
进入meta模式关闭背光灯
查看>>
webstorm上svn的安装使用
查看>>
【JEECG技术文档】数据权限自定义SQL表达式用法说明
查看>>