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

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

P1091 合唱队形

题目描述

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

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

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

输入输出格式

输入格式:

 

输入文件chorus.in的第一行是一个整数N(2<=N<=100),表示同学的总数。第一行有n个整数,用空格分隔,第i个整数Ti(130<=Ti<=230)是第i位同学的身高(厘米)。

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
8186 186 150 200 160 130 197 220
输出样例#1:
4

说明

对于50%的数据,保证有n<=20;

对于全部的数据,保证有n<=100。

 

 

分析:

方法一:要找到这个点为止的从左开始的最长上升不连续子序列;以及从右开始的最长上升不连续子序列。

方法二:求一遍最长上升子序列再求一遍最长下降子序列用总人数减去最长上升子序列的人数减去最长下降子序列的人数再加上一就0k了。

 

1 #include
2 using namespace std; 3 long long t,n,a[101],i,p[101],maxi,j,x[101]; 4 int main() 5 { 6 7 cin>>n;memset(a,0,sizeof(a));memset(p,0,sizeof(p));maxi=-1;memset(x,0,sizeof(x)); 8 for(i=1;i<=n;i++) 9 cin>>a[i],p[i]=1,x[i]=1;10 for(i=2;i<=n;i++)11 for(j=1;j
a[j])13 p[i]=max(p[j]+1,p[i]);14 for(i=n ;i>=1 ;i--)15 for(j=n ;j>i;j--)16 if(a[i]>a[j]&&x[i]
maxi)19 maxi=x[i]+p[i];20 cout<
<

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/7426225.html

你可能感兴趣的文章
反射机制
查看>>
CocoaPod
查看>>
BZOJ 1251: 序列终结者 [splay]
查看>>
5G边缘网络虚拟化的利器:vCPE和SD-WAN
查看>>
MATLAB基础入门笔记
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>