九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500
- 题目描述:
-
在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往楼下跑了,然后身高矮的排在队伍的前面,身高较高的就要排在队尾。突然,有一天出操负责人想了一个主意,想要变换一下队形,就是当大家都从楼上跑下来后,所有的学生都随机地占在一排,然后出操负责人从队伍中抽取出一部分学生,使得队伍中剩余的学生的身高从前往后看,是一个先升高后下降的“山峰”形状。据说这样的形状能够给大家带来好运,祝愿大家在学习的道路上勇攀高峰。(注,山峰只有一边也符合条件,如1,1、2,2、1均符合条件)
- 输入:
-
输入可能包含多个测试样例。
对于每个测试案例,输入的第一行是一个整数n(1<=n<=1000000):代表将要输入的学生个数。
输入的第二行包括n个整数:代表学生的身高(cm)(身高为不高于200的正整数)。
- 输出:
-
对应每个测试案例,输出需要抽出的最少学生人数。
- 样例输入:
-
6
100 154 167 159 132 105
5
152 152 152 152 152
- 样例输出:
-
0
4
#include <stdio.h> #define MAX 1000001 int student[MAX];
int cnt[MAX];//cnt[i]表示以i为“峰顶”的最长子序列
int dp[MAX]; int BSearch(int dp[], int start, int end, int key){//搜索大于等于key的第一个元素的位置
int middle;
while (start <= end){
middle = ((end - start) >> 1) + start;
if (dp[middle] < key)
start = middle + 1;
else if (dp[middle] > key)
end = middle - 1;
else
return middle;
}
return start;
} int Insert(int data, int *nMax){//找到以data为结尾的上升子序列的长度,并返回
int j = BSearch(dp, 0, *nMax, data);
if (j > *nMax){
*nMax = j;
dp[j] = data;
}
else if (dp[j-1] < data && data < dp[j]){
dp[j] = data;
}
return j;
} void LIS(int n){//求以student[i]为结尾的上升子序列的长度
int i;
int nMaxLIS = 1;
dp[0] = -1;
dp[1] = student[1];
cnt[1] = 1;
for (i = 2; i <= n; ++i){
cnt[i] = Insert(student[i], &nMaxLIS);
}
} void LDS(int n){//求以student[i]为开头的下降子序列的长度
int i;
int nMaxLDS = 1;
dp[0] = -1;
dp[1] = student[n];
for (i = n - 1; i >= 1; --i){
cnt[i] += Insert(student[i], &nMaxLDS) - 1;
}
} int main(void){
int n, i;
int max;
while (scanf("%d", &n) != EOF){
for (i = 1; i <= n; ++i)
scanf("%d", &student[i]);
LIS(n);
LDS(n);
max = -1;
for (i = 1; i <= n; ++i)
if (max < cnt[i])
max = cnt[i];
printf("%d\n", n - max);
} return 0;
}
九度OJ上相似的题目:http://ac.jobdu.com/problem.php?pid=1131
九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)的更多相关文章
- 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1131 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合 ...
- 【九度OJ】题目1195:最长&最短文本 解题报告
[九度OJ]题目1195:最长&最短文本 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串, ...
- 九度OJ 1452 搬寝室 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1452 题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3 ...
- 九度OJ 1499 项目安排 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时 ...
- 九度OJ 1547 出入栈 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1547 题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈. 要求在操作序列的 ...
- 九度OJ 1410 垒积木 -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1410 题目描述: 给你一些长方体的积木,问按以下规则能最多垒几个积木. 1 一个积木上面最多只能垒另一个积木. 2 ...
- 九度OJ 1453 Greedy Tino -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1453 题目描述: Tino wrote a long long story. BUT! in Chinese... ...
- 九度OJ 1086 最小花费--动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1086 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对 ...
- 九度oj 题目1337:寻找最长合法括号序列
题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...
随机推荐
- 文件控制列表命令setfacl和getfacl的使用
一 需求 有以下需求,通过setfacl命令实现 一组用户可写可读可执行,一组用户可写可执行,另一组用户只可读 linux rwx oracle wx uplook r 二 解决 第一步 添加六个用户 ...
- 采用Reflector的VS.net插件断点调试无源码DLL 分类:
.Net的编程利器Reflector可以反编译基于.net开发的应用程序和DLL,其功能强大不用多说.今天想试验一把利用VS.net的插件断点调试外部无源码的DLL(只要是程序集都可以,所以exe也行 ...
- uva 624 CD 01背包打印路径
// 集训最终開始了.来到水题先 #include <cstdio> #include <cstring> #include <algorithm> #includ ...
- [JavaScript]'this'详解
http://blog.csdn.net/sodino/article/details/51318565
- zend studio快捷模板 开发工具之zend studio一些配置
以下是以Zend Studio 10.0.0版本为基础的: 模板的配置(template): [菜单]->[Window]->[preferences]->[PHP]->[Ed ...
- Android利用Looper在子线程中改变UI
MainActivity如下: package cn.testlooper; import android.app.Activity; import android.os.Bundle; import ...
- [转帖]2010.10.7google北大笔试题回忆
1.1关于IP协议那个正确 A IP是TCP上层协议B IP协议是应用层协议C由于两个属于同一层协议,他们之间可以直接通信DIP协议不提供可靠的通信 1.2 关于内存正确的是 A内存的存取速度不能低于 ...
- Android更改imagebutton为纯色方法
我的imagebutton所用的背景png图片是灰色的,但是我想让他显示出来是白色的按钮,如果用ps去一个个填充不太现实,那有没有什么办法去通过xml里的属性改变背景颜色呢? 一开始我用了网上的方法 ...
- the first assignment of software testing
Github ID: bzdwdmzjsmff Github address: https://github.com/bzdwdmzjsmff alternative article: Increa ...
- mapping 详解1(mapping type)
映射(mapping) 映射是定义一个文档以及其所包含的字段如何被存储和索引的方法. 例如,用映射来定义以下内容: 哪些 string 类型的 field 应当被当成当成 full-text 字段 哪 ...