九度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的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...
随机推荐
- SQLite使用教程7 删除表
http://www.runoob.com/sqlite/sqlite-drop-table.html SQLite 删除表 SQLite 的 DROP TABLE 语句用来删除表定义及其所有相关数据 ...
- [AngularJS - thoughtram] Exploring Angular 1.3: Binding to Directive Controllers
The post we have: http://www.cnblogs.com/Answer1215/p/4185504.html gives a breif introduce about bin ...
- 在centos上使用yum安装redis及php扩展php-redis
.wget http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm -ivh epel-rele ...
- [Embed(source="asset.swf")] 使用其中的所有资源
在AS3中,我们可以使用 [Embed(source="asset.swf", symbol="symbol")] private var symbolClas ...
- Android Service 服务(一)—— Service .
http://blog.csdn.net/ithomer/article/details/7364024 一. Service简介 Service是android 系统中的四大组件之一(Activit ...
- java_Hashtable实例
package ming; import java.util.Hashtable; class D { int count; public D(int count) { this.count = co ...
- 一个小例子讲讲jsonp
1.何为jsonp(json with padding) json我们都知道并用过.那么jsonp呢,呃,好像听过,但没用过.很久以来楼主也只是听过这个名词而已.直到今晚楼主看到一篇文章(http:/ ...
- C# 之 读取Word时发生 “拒绝访问” 及 “消息筛选器显示应用程序正在使用中” 异常的处理
1.Asp.net中建立Microsoft.Office.Interop.Word.Application时出现 “ 拒绝访问 ” 错误 项目中要实现在服务器端打开一个Word模版文件,修改其内容后再 ...
- Convert Date between LocalDateTime
http://blog.progs.be/542/date-to-java-time Java8 has new date and time classes to “replace” the old ...
- IPC:shared memory
#include <stdio.h> #include <sys/shm.h> #include <sys/stat.h> int main () { int se ...