POJ1836 Alignment(LIS)
题目链接。
分析:
从左向右求一遍LIS,再从右向左求一遍LIS,最后一综合,就OK了。
注意:
有一种特殊情况(详见discuss):
8
3 4 5 1 2 5 4 3
答案是:2
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue> using namespace std; const int maxn = + ;
const double INF = 1e100; double a[maxn];
int d1[maxn], d2[maxn];\ int main() {
int n;
// freopen("my.txt", "r", stdin); while(cin>>n) {
for(int i=; i<n; i++) cin>>a[i]; d1[] = ;
for(int i=; i<n; i++) {
int m = ;
for(int j=; j<i; j++) {
if(a[j] < a[i] && m < d1[j]) m = d1[j];
}
d1[i] = m+;
} d2[n-] = ;
for(int i=n-; i>=; i--) {
int m = ;
for(int j=n-; j>i; j--) {
if(a[j] < a[i] && m < d2[j]) m = d2[j];
}
d2[i] = m+;
} int ans = ;
for(int i=; i<n; i++) {
for(int j=i+; j<n; j++) {
ans = max(ans, d1[i]+d2[j]);
}
}
printf("%d\n", n-ans);
} return ;
}
加个二分写法,在《训练指南》上学的二分写法,解题思想一样,写法不一样而已。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <algorithm> using namespace std; const int maxn = + ;
const double INF = 1e100; double a[maxn];
int d1[maxn], d2[maxn];
double G[maxn]; int main() {
int n;
//freopen("my.txt", "r", stdin);
while(cin>>n) {
for(int i=; i<n; i++) cin>>a[i]; for(int i=; i<=n; i++) G[i] = INF;
for(int i=; i<n; i++) {
int k = lower_bound(G+, G+n+, a[i]) - G;
G[k] = a[i];
d1[i] = k;
} for(int i=; i<=n; i++) G[i] = INF;
for(int i=n-; i>=; i--) {
int k = lower_bound(G+, G+n+, a[i]) - G;
G[k] = a[i];
d2[i] = k;
} int ans = ;
for(int i=; i<n; i++) {
for(int j=i+; j<n; j++) {
ans = max(ans, d1[i]+d2[j]);
}
}
printf("%d\n", n-ans);
} return ;
}
POJ1836 Alignment(LIS)的更多相关文章
- POJ1836:Alignment(LIS的应用)
题目链接:http://poj.org/problem?id=1836 题目要求: 给你n个数,判断最少去掉多少个数,从中间往左是递减的序列,往右是递增的序列 需注意的是中间可能为两个相同的值,如 1 ...
- POJ1836 - Alignment(LIS)
题目大意 一队士兵排成一条直线,问最少出队几个士兵,使得队里的每个士兵都可以看到又端点或者左端点 题解 从左往右搞一遍LIS,然后从右往左搞一遍LIS,然后枚举即可... 代码: #include&l ...
- poj1836 Alignment
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11707 Accepted: 3730 Descri ...
- POJ 1836 Alignment --LIS&LDS
题意:n个士兵站成一排,求去掉最少的人数,使剩下的这排士兵的身高形成“峰形”分布,即求前面部分的LIS加上后面部分的LDS的最大值. 做法:分别求出LIS和LDS,枚举中点,求LIS+LDS的最大值. ...
- POJ 1836 Alignment 最长递增子序列(LIS)的变形
大致题意:给出一队士兵的身高,一开始不是按身高排序的.要求最少的人出列,使原序列的士兵的身高先递增后递减. 求递增和递减不难想到递增子序列,要求最少的人出列,也就是原队列的人要最多. 1 2 3 4 ...
- POJ 1836 Alignment
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 11450 Accepted: 3647 Descriptio ...
- UVa10534 - Wavio Sequence(LIS)
题目大意 给定一个长度为n的整数序列,求个最长子序列(不一定连续),使得该序列的长度为奇数2k+1,前k+1个数严格递增,后k+1个数严格递减.注意,严格递增意味着该序列中的两个相邻数不能相同.n&l ...
- POJ - 1836 Alignment (动态规划)
https://vjudge.net/problem/POJ-1836 题意 求最少删除的数,使序列中任意一个位置的数的某一边都是递减的. 分析 任意一个位置的数的某一边都是递减的,就是说对于数h[i ...
- POJ 1836-Alignment(DP/LIS变形)
Alignment Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13465 Accepted: 4336 Descri ...
随机推荐
- [转] Java中ArrayList类的用法
1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和ILis ...
- nmap使用方法
你是否曾想知道你所在局域网中哪些IP已经被使用了?还有哪些IP地址没有被使用?是否想知道某个IP地址下是什么系统…… 这些问题我们都可以使用一个nmap的工具解决,下面,就让我们开始了解nmap. ...
- warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
先来一段json_decode官方说明 mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, i ...
- 转载:C#中&与&&的区别
原文地址:http://www.cnblogs.com/chinafine/archive/2009/02/17/1392309.html 感谢博主分享! 二元运算符 (&) 为整型和 b ...
- 把某个asp.net 控件 替换成 自定义的控件
功能:可以把某个asp.net 控件 替换成 自定义的控件 pages 的 tagMapping 元素(ASP.NET 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. ...
- [转] 与调试器共舞 - LLDB 的华尔兹
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNu ...
- 02-测试、文件读写、xml解析
测试 黑盒测试 测试逻辑业务 白盒测试 测试逻辑方法 根据测试粒度 方法测试:function test 单元测试:unit test 集成测试:integration test 系统测试:syste ...
- hdu1301 Jungle Roads (Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1301 依旧Prim............不多说了 #include<iostream> ...
- POJ 2411.Mondriaan's Dream 解题报告
题意: 给出n*m (1≤n.m≤11)的方格棋盘,用1*2的长方形骨牌不重叠地覆盖这个棋盘,求覆盖满的方案数. Solution: 位运算+状态压缩+dp ...
- iphone立体矢量图标_学习教程