题目地址: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
来源:
微策略2013年校园招聘面试一面试题

#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 出操队形 -- 动态规划(最长上升子序列)的更多相关文章

  1. 九度OJ 1131 合唱队形 -- 动态规划(最长递增子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1131 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交换位置就能排成合 ...

  2. 【九度OJ】题目1195:最长&最短文本 解题报告

    [九度OJ]题目1195:最长&最短文本 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串, ...

  3. 九度OJ 1452 搬寝室 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1452 题目描述: 搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3 ...

  4. 九度OJ 1499 项目安排 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1499 题目描述: 小明每天都在开源社区上做项目,假设每天他都有很多项目可以选,其中每个项目都有一个开始时间和截止时 ...

  5. 九度OJ 1547 出入栈 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1547 题目描述: 给定一个初始为空的栈,和n个操作组成的操作序列,每个操作只可能是出栈或者入栈. 要求在操作序列的 ...

  6. 九度OJ 1410 垒积木 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1410 题目描述: 给你一些长方体的积木,问按以下规则能最多垒几个积木. 1 一个积木上面最多只能垒另一个积木. 2 ...

  7. 九度OJ 1453 Greedy Tino -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1453 题目描述: Tino wrote a long long story. BUT! in Chinese... ...

  8. 九度OJ 1086 最小花费--动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1086 题目描述: 在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对 ...

  9. 九度oj 题目1337:寻找最长合法括号序列

    题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...

随机推荐

  1. UITextfield设置Placeholder颜色 控件 内边距、自适应高度

    //创建UITextField对象 UITextField * tf=[[UITextField alloc]init];    //设置Placeholder颜色 [text setAttribut ...

  2. Cocos2dx 小技巧(十一) 小人虽短,但能够旋转

    转眼五一就到了,放假三天应该做些什么呢?窝在家里钻研技术?写博客?no no no no,这样的"伤害"自己的方式实在让我无法忍受.本来和大学那伙人越好了一起去哪里玩玩,喝酒聊天啥 ...

  3. Codeforces Round #323 (Div. 2) C. GCD Table 暴力

    C. GCD Table Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/583/problem/C ...

  4. 将图片序列保存为GIF文件

    http://stackoverflow.com/questions/11459568/issue-with-rebuilding-and-saving-gifs-using-tgifimage 将图 ...

  5. glog摘记

    projcet url:https://code.google.com/p/google-glog/ usage: application-level logging setting flags GL ...

  6. JFinal之学习资源

    JFinal官网: http://www.jfinal.com/ JFinal在线API: http://tool.oschina.net/apidocs/apidoc?api=jfinal JFin ...

  7. .NET下解析Json的方法

    .NET下几种常见的解析JSON方法 主要类 命名空间 限制 内建LINQ支持 DataContractJsonSerializer System.Runtime.Serialization.Json ...

  8. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题

    之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...

  9. Basic Example of JMX Technology--转载

    原文地址:http://nick-lab.gs.washington.edu/java/jdk1.5b/guide/jmx/tutorial/connectors.html Basic Example ...

  10. java code to byte code--partone--reference

    Understanding how Java code is compiled into byte code and executed on a Java Virtual Machine (JVM) ...