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

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

描述

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

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

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

格式

输入格式

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

输出格式

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

样例1

样例输入1

 
8186 186 150 200 160 130 197 220

样例输出1

 
4

限制

每个测试点1s

来源

NOIp 2004

 

  正反两便不下降子序列,然后枚举加起来-1(中间的重复计算了一次)中的最大值就是答案,没啥说的。

1 #include
2 using namespace std; 3 const int maxn=500; 4 int a[maxn]; 5 int f1[maxn]; 6 int f2[maxn]; 7 int N; 8 int ANS; 9 int main(){10 11 scanf("%d",&N);12 13 for(int i=1;i<=N;i++)14 scanf("%d",&a[i]);15 for(int i=1;i<=N;i++){16 f1[i]=1;17 f2[i]=1;18 }19 for(int i=2;i<=N;i++){20 for(int j=1;j
a[j]){22 f1[i]=max(f1[i],f1[j]+1);23 }24 }25 }26 f2[N]=1;27 for(int i=N-1;i>=1;i--){28 for(int j=N;j>i;j--){29 if(a[i]>a[j]){30 f2[i]=max(f2[i],f2[j]+1);31 }32 }33 }34 35 for(int i=1;i<=N;i++){36 ANS=max(ANS,f1[i]+f2[i]-1);37 }38 cout<

 

 

转载于:https://www.cnblogs.com/CXCXCXC/p/4668286.html

你可能感兴趣的文章
Android Studio或者Eclipse中的最常用的快捷键,最简单的,部分不适用eclipse
查看>>
iTerm的安装以及配置Oh My Zsh
查看>>
Mongodb 定时备份和恢复
查看>>
为加密的NTFS分区制作一把备份密钥
查看>>
移动游戏高速增长为市场营销带来新的机会
查看>>
路由器交换机命令总结
查看>>
【v2.x OGE-example 第一节】 绘制实体
查看>>
WPF数据绑定(1-简单数据绑定)
查看>>
java多线程中的异常处理
查看>>
RAID配置实例
查看>>
成为Java GC专家(5)—Java性能调优原则
查看>>
ie6和ie7两个div之间有空隙
查看>>
[体感游戏]关于体感游戏的一些思考(三) --- 射击
查看>>
find 命令
查看>>
vs code golang插件记录
查看>>
java基础-可执行jar包
查看>>
android 中使用ExpandableListView控件结合服务器json文件的下载
查看>>
万能的Entry,两个变量的Model/JavaBean再也不用写了!
查看>>
日常总结:自学操作系统基础的一些领悟
查看>>
fping安装配置
查看>>