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

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

Codevs 1058 合唱队形

2004年NOIP全国联赛提高组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
题目描述 
Description

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

    合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK,  则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K)。
    你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形。

输入描述 
Input Description

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

输出描述 
Output Description

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

样例输入 
Sample Input

8

186 186 150 200 160 130 197 220

样例输出 
Sample Output

4

数据范围及提示 
Data Size & Hint

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

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

思路:

    进行两遍dp,正反两次

代码:

1 #include
2 #include
3 using namespace std; 4 5 int ans,n,a[101]; 6 int dpu[101]; 7 int dpd[101]; 8 9 int main()10 {11 cin>>n;12 for(int i=1;i<=n;i++){13 cin>>a[i];14 }15 for(int i=1;i<=n;i++)16 for(int j=1;j<=i;j++){17 if(a[i]>a[j]) dpu[i]=max(dpu[i],dpu[j]+1);18 }19 for(int i=n;i>=1;i--)20 for(int j=n;j>=i;j--){21 if(a[i]>a[j]) dpd[i]=max(dpd[i],dpd[j]+1);22 }23 for(int i=1;i<=n;i++){24 ans=max(ans,dpu[i]+dpd[i]+1);25 }26 cout<
<

 

转载于:https://www.cnblogs.com/wsdestdq/p/6772547.html

你可能感兴趣的文章
Mongodb 基本命令
查看>>
Qt中QTableView中加入Check列实现
查看>>
“富豪相亲大会”究竟迷失了什么?
查看>>
控制文件的备份与恢复
查看>>
返回代码hdu 2054 A==B?
查看>>
Flink独立集群1
查看>>
iOS 8 地图
查看>>
20165235 第八周课下补做
查看>>
[leetcode] 1. Two Sum
查看>>
iOS 日常工作之常用宏定义大全
查看>>
PHP的SQL注入技术实现以及预防措施
查看>>
MVC Razor
查看>>
软件目录结构规范
查看>>
Windbg调试Sql Server 进程
查看>>
linux调度器系列
查看>>
mysqladmin
查看>>
解决 No Entity Framework provider found for the ADO.NET provider
查看>>
SVN服务器搭建和使用(三)(转载)
查看>>
Android 自定义View (三) 圆环交替 等待效果
查看>>
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>