合唱队形

Time Limit: 1000 ms     Memory Limit: 65536 KB
Total Submit: 95     Accepted: 54

Description
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为T1, T2, …, TK,则他们的身高满足T1 < T2 < … < Ti , 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
思路:求两次LIS。
DPup[i]:以a[i]为结尾的最长上升子序列。
DPdown[i]:以n-1为开始,a[i]为结尾的最长上升子序列。
dp[i]:以a[i]为出发点的最长合唱队形。
最少的出列人数=总人数减去最长的合唱队形
注意:因为DPup[i]和DPdown[i]中算了两次a[i],所以dp[i]=DPup[i]+DPdown[i]-1;
#include<iostream>
using namespace std;
int dp[105], DPup[105], DPdown[105], num[105];
int main()
{
int n;
while (cin >> n)
{
for (int i = 0; i < n; i++)
{
cin >> num[i];
}
DPup[0] = DPdown[n - 1] = 1;
for (int i = 1; i < n; i++)
{
int maxup = 1;
for (int j = 0; j < i; j++)
{
if (num[i]>num[j])
{
maxup=maxup>DPup[j] + 1 ? maxup : DPup[j] + 1;
}
}
DPup[i] = maxup;
}
for (int i = n - 2; i >= 0; i--)
{
int maxdown = 1;
for (int j = n - 1; j > i; j--)
{
if (num[i] > num[j])
{
maxdown=maxdown > DPdown[j] + 1 ? maxdown : DPdown[j]+1;
}
}
DPdown[i] = maxdown;
}
int max = 1;
for (int i = 0; i < n; i++)
{
if (DPup[i] + DPdown[i] - 1>max)
{
max = DPup[i] + DPdown[i] - 1;
}
}
cout << n - max << endl;
}
return 0;
}

Vijos P1098合唱队形相关推荐

  1. Vijos P1098 合唱队形题解

    程序思路就是  求一遍最长上升子序列长度和最长下降子序列长度. #include <iostream> using namespace std; int a[1001],f[1001],g ...

  2. 合唱队形(递增再递减的最长子序列)

    题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, -, K,他们的 ...

  3. P1091 合唱队形[单调性+DP]

    题目来源:洛谷 题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高 ...

  4. P1091 合唱队形(LIS)

    题目描述 NNN位同学站成一排,音乐老师要请其中的(N−KN-KN−K)位同学出列,使得剩下的KKK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K1,2, ...

  5. 洛谷P1091 合唱队形

    洛谷P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K他 ...

  6. UOJ #214 合唱队形 (概率期望计数、DP、Min-Max容斥)

    UOJ #214 合唱队形 (概率期望计数.DP.Min-Max容斥) 9个月的心头大恨终于切掉了!!!! 非常好的一道题,不知为何uoj上被点了70个差评. 题目链接: http://uoj.ac/ ...

  7. tyvj 1067 合唱队形 dp LIS

    P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位 ...

  8. 洛谷1091合唱队形

    题目描述 N位同学站成一排,音乐老师要请其中的(N−K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,-,K,他们的身高分别为T1​,T ...

  9. 【DP】合唱队形(jzoj 1122)

    合唱队形 jzoj 1122 题目大意: 有n个人,按一定的顺序站成一排,最少减去多少个人可以使队列以一个人为中心,两边分别递减 输入样例 8 186 186 150 200 160 130 197 ...

最新文章

  1. Python 之 Pandas (四)处理丢失数据
  2. 在使用RegularExpressionValidator验证控件时的验证功能及其验证表达式
  3. boost::owner_equal_to相关的测试程序
  4. 什么是 SAP UI5 的 Hybrid Web Containers
  5. 模拟UIWebView
  6. 表弟励志做程序员了,除了霸王我还能给他什么?
  7. lisp励遍图块中的实体_lisp励遍图块中的实体_「AutoCAD之图块编辑」八仙过海各显神通——图块编辑方法综述......
  8. 拓端tecdat|R语言估计获胜概率:模拟分析学生多项选择考试通过概率可视化
  9. android播放vp8透明,Androids 使用MediaCodec在TV端播放不了视频
  10. AD选择板边覆铜教程
  11. EtherCAT xml 解析(不定时更新)
  12. Flash Builder 4 正式版破解注册方法(flex4)
  13. 企业网络安全最常遇到的安全问题是什么,主要面临哪些威胁?
  14. Python 3.6 使用wordcloud制作词云(可设背景图像)
  15. 达梦数据库(DM)——命令方式开启达梦数据库本地归档的具体方法
  16. 大文件传输软件-镭速——MAC版分享
  17. 2013.6甲骨文公司的电话面试
  18. LSM tree(日志结构合并树)_笔记
  19. static 和 extern水火不容。
  20. 以web形式实现模拟炸金花游戏

热门文章

  1. React-Native环境搭建各种问题处理
  2. 思维导图对我生活以及工作的帮助(用户投稿)
  3. Ubuntu打开telnet服务
  4. LeetCode经典300题【C++版】
  5. AWS HTTPS证书DNS验证备忘
  6. Oracle 错误解决(ORA-01034和ORA-27101)
  7. VS Code下GO语言环境搭建
  8. logback输出json格式日志并带traceId
  9. 八月 Z 星月度速览 | 杭州 Arch Meetup、源码解析两期接力,搭建方言翻译器,向量化 DNA 序列……...
  10. lvs负载均衡+keepalive高可用