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 ...
随机推荐
- [疑惑与解答] WxPython In Action -1
在学<活学活用wxPython>第三章的时候,我遇到一点疑惑,那就是下面语句的区别是什么 例 3.1 第4,5行: panel = wx.Panel(self, -1) button = ...
- Android进阶笔记01:Android 网络请求库的比较及实战(一)
在实际开发中,有的时候需要频繁的网络请求,而网络请求的方式很多,最常见的也就那么几个.本篇文章对常见的网络请求库进行一个总结. 一.使用HttpUrlConnection: 1. HttpUrlCon ...
- ARM map(Program size)
1.Keil程式编译完之后,在List目录下会生成一个.map文件,里面包含各个存储块数据大小. Code:ARM 指令. RO(Read only)只读数据,如const int gu8test = ...
- BestCoder 1st Anniversary
Souvenir Accepts: 1078 Submissions: 2366 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...
- C# - 二叉树表达式计算
很早以前就写过双栈的表达式计算. 这次因为想深入学一下二叉树,网上都是些老掉牙的关于二叉树的基本操作. 感觉如果就学那些概念,没意思也不好记忆.于是动手写了一个表达式计算的应用例子. 这样学习印象才深 ...
- CoreLocation+MapKit系统定位(含坐标以及详细地址)
iOS8 之后出现一些新的配置 [self.manager requestWhenInUseAuthorization]; 并且在info.plist文件中增加 NSLocationWhenInUse ...
- java学习——网络编程UDP
UDP 将数据及源和目的封装成数据包中,不需要建立连接 每个数据报的大小限制在64k内 因无连接,是不可靠协议 不需要建立连接,速度快 TCP 建立连接,形成传输数据的通道 在连接中进行大数据量传输 ...
- 你好,C++(9)坐216路公交车去买3.5元一斤的西红柿——C++中如何表达各种数值数据 3.3 数值数据类型
3.3 数值数据类型 从每天早上睁开眼睛的那一刻开始,我们几乎每时每刻都在与数字打交道:从闹钟上的6点30分,到上班坐的216路公共汽车:从新闻中说的房价跌到了100元每平米到回家买菜时的西红柿3. ...
- hdu1142 A Walk Through the Forest( Dijkstra算法+搜索)
看到这道题,想起了我家旁边的山! 那是一座叫做洪山寨的山,据说由当年洪秀全的小妾居住于此而得名! 山上盛产野果(很美味)! 好久没有爬上去了! #include<stdio.h> #inc ...
- 试用ubuntu-12.04.3-desktop-amd64
由于工作需要,终于要开始使用大名鼎鼎的ubuntu了,从网上下了个ubuntu-12.04.3-desktop-amd64,通过vmware安装,过程相当顺利,只是装完后重启动,发现回到了命令行模式. ...