题目描述

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

合唱队形是指这样的一种队形:设$K$位同学从左到右依次编号为$1,2,...,K$,他们的身高分别为$T_{1},T_{2},...,T_{K}$​, 则他们的身高满足$T_{1}< ...<T_{i}>T_{i+1}>...>T_{K}\left ( 1\leqslant i\leqslant K\right )$。

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

输入格式

共二行。

第一行是一个整数$N\left ( 2\leqslant N\leqslant 100\right )$,表示同学的总数。

第二行有$N$个整数,用空格分隔,第$i$个整数$T_{i}\left ( 130\leqslant T_{i}\leqslant 230\right )$是第$i$位同学的身高(厘米)。

输出格式

一个整数,最少需要几位同学出列。

样例数据

输入

8
186 186 150 200 160 130 197 220

输出

4

分析

根据题目信息,可将题目翻译为:在一组数据中找到除最长不下降子序列与最长不上升子序列以外的数的个数

$Dp_{i}$表示从$1$到$i$的最长不下降子序列的长度,至于最长不上升的子序列长度求法,就是循环倒过来,继续求最长不下降子序列长度

$Dp\underline{ }UP$表示$T_{i}$之前序列长度,$Dp\underline{ }DOWN$表示$T_{i}$之后的序列长度

状态转移方程

代码

#include <bits/stdc++.h>

#define Enter puts("")
#define Space putchar(' ') using namespace std; typedef long long ll;
typedef double Db; inline ll Read()
{
ll Ans = 0;
char Ch = getchar() , Las = ' ';
while(!isdigit(Ch))
{
Las = Ch;
Ch = getchar();
}
while(isdigit(Ch))
{
Ans = (Ans << 3) + (Ans << 1) + Ch - '0';
Ch = getchar();
}
if(Las == '-')
Ans = -Ans;
return Ans;
} inline void Write(ll x)
{
if(x < 0)
{
x = -x;
putchar('-');
}
if(x >= 10)
Write(x / 10);
putchar(x % 10 + '0');
} int T[100001];
int Dp_UP[100001];
int Dp_DOWN[100001];
int Ans; int main()
{
int n;
n = Read();
for(int i = 1; i <= n; i++)
T[i] = Read();
T[0] = 0;
for(int i = 1; i <= n; i++)
for(int j = 0; j < i; j++)
if(T[i] > T[j])
Dp_UP[i] = max(Dp_UP[i] , Dp_UP[j]+1);
T[n + 1] = 0;
for(int i = n; i > 0; i--)
for(int j = n + 1; j > i; j--)
if(T[i] > T[j])
Dp_DOWN[i] = max(Dp_DOWN[i] , Dp_DOWN[j] + 1);
for(int i = 1; i <= n; i++)
Ans = max(Dp_UP[i] + Dp_DOWN[i] - 1, Ans);
Write(n - Ans);
return 0;
}

最新文章

  1. .NET+IIS+MSSQL配置
  2. Atitit webservice的发现机制 discover机制
  3. 使用Angular2理由
  4. 20145213《Java程序设计》第五周学习总结补充
  5. jsp学习(三)
  6. C++ CreateDirectory
  7. Arrays.sort(new String[]{&quot;aaa&quot;}); 排序方法
  8. Children&#39;s Day
  9. Linux查看端口号
  10. python中的类属性和实例属性
  11. Python学习笔记(四)
  12. jsp内置对象 的使用范围和类型【说明】
  13. Intellij IDEA插件开发入门
  14. javascript项目实战---ajax实现无刷新分页
  15. html5 拖拽上传文件时,屏蔽浏览器默认打开文件
  16. c选择排序算法
  17. angular笔记_10
  18. bfs记录路径,蓝桥杯真题
  19. 小白的CTF学习之路2——二进制数据基础与运算(上)
  20. [Algorithm] Check for balanced parentheses using stack

热门文章

  1. Windows核心编程笔记之内核对象
  2. XCTF-FlatScience
  3. JS阻止冒泡事件
  4. Java项目中每一个类都可以有一个main方法
  5. 【近取 Key】Alpha - v1.0 测试报告
  6. Python设计模式知多少
  7. mysql 格式化 取日期
  8. 3. java基础语法
  9. cent 7 识别exfat
  10. CentOS 7系统启动后怎么从命令行模式切换到图形界面模式