51nod_2369 奈芙莲的序列(动态规划)
奈芙莲的序列
Problem Description
有一天可爱的Nephren得到了一个序列,一开始,她取出序列的第一个数,形成一个新的序列B,然后取出序列A的第二个数,放在序列B的最左边或最右边,序列B此时有两个数,下一步,再取出序列A的第三个数放在序列B的最左边或最右边,……
现在的问题是,通过上面的步骤,可以得到B的最长上升子序列的长度是多少
Input
第一行,一个整数N.
第二行,N个整数,表示序列A。
Output
一行一个整数,表示最长上升子序列的长度
Sample Input
4
2 1 3 4
Sample Output
4
题解:
只考虑组成最长序列的那些数字,其他数字忽略。当最长的序列的第一个元素放入B序列后,剩下的数字要不比B小,靠左放;要不比B大,向右放;要不就不是最长序列的一部分。
将数组逆序,分别求出每个位置的LIS和最长下降子序列,设为dp1和dp2,结果为dp1i+dp2i−1dp1_i+dp2_i-1dp1i+dp2i−1的最大值。
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<map>
#include<vector>
#include<queue>
#include<iterator>
#define dbg(x) cout<<#x<<" = "<<x<<endl;
#define INF 0x3f3f3f3f
#define eps 1e-7using namespace std;
typedef long long LL;
typedef pair<int, int> P;
const int maxn = 200100;
const int mod = 1000000007;
int a[maxn], dp1[maxn], dp2[maxn], g1[maxn], g2[maxn];int main()
{int n, i, j, k, pos;int top1 = 0, top2;scanf("%d", &n);for(i=1;i<=n;i++)scanf("%d", &a[i]);for(i=n;i>=1;i--){pos = lower_bound(g1, g1+top1, a[i])-g1;if(pos == top1)top1++;g1[pos] = a[i];dp1[i] = pos+1;}top2 = n;for(i=n;i>=1;i--){pos = upper_bound(g2+top2, g2+n, a[i])-g2;if(pos == top2)top2--;g2[pos-1] = a[i];dp2[i] = n-pos+1;}int ans = 1;for(i=1;i<=n;i++)ans = max(ans, dp1[i]+dp2[i]-1);printf("%d\n", ans);return 0;
}
51nod_2369 奈芙莲的序列(动态规划)相关推荐
- 51NOD 2370 奈芙莲的护符
>>这是原题传送门<< 答案参考来自 http://www.cnblogs.com/sugewud/p/9822933.html 思路:看到取值范围之后,仅有的思路还是暴力?: ...
- 洛谷P2501数字序列 动态规划
题目 题目链接 题解 这道题目我觉得是神题,非常有意思的题目,也挺难做的. 第一问:求最少需要改变的数量 这一问比较简单,之前也见过这种套路. 定义dp[i]dp[i]dp[i]表示aaa序列中a[1 ...
- 113. Leetcode 674. 最长连续递增序列 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i]:以下标i为结尾的数组的连续递增的子序列长度为dp[i]. 注意这里的定义,一定是以下标i为结尾,并不是说一定以下标0为起始位置. 步骤二.推断状 ...
- BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治
原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...
- NOIP2018提高组省一冲奖班模测训练(一)
比赛链接 https://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 这次考试的题非常有质量 ...
- [51Nod]NOIP2018提高组省一冲奖班模测训练(一)题解
http://www.51nod.com/contest/problemList.html#!contestId=72&randomCode=147206 原题水题大赛.. A.珂朵莉的旅行 ...
- 51Nod NOIP2018提高组省一冲奖班模测训练
51Nod NOIP2018提高组省一冲奖班模测训练 NOIP2018提高组省一冲奖班模测训练1 T1 珂朵莉的旅行 T2 奈芙莲的序列 T3 奈芙莲的护符 NOIP2018提高组省一冲奖班模测训练2 ...
- 【学习笔记】线段树详解(全)
[学习笔记]线段树详解(全) 和三个同学一起搞了接近两个月的线段树,头都要炸了T_T,趁心态尚未凉之前赶快把东西记下来... [目录] [基础]作者:\((Silent\)_\(EAG)\) [懒标记 ...
- noip模拟赛 Nephren Ruq Insania
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg 注意:本题大样例4的输出文件修改为 https://pan.baidu.com/s/1b ...
最新文章
- Java中程序初始化的顺序
- poj 3045 Cow Acrobats (贪心!!不是二分,)
- typora export to word is excellent
- atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
- dart与java互调_Dart与Java不同的地方
- Elasticsearch 6.x 下载安装
- idea 新建ssm java ee_IDEA搭建SSM项目实现增删改查
- 阿里晓斌:如何做好技术 Team Leader?
- SSM简单参数传递与获取方法
- 利用BioPerl将DNA序列翻译成蛋白序列
- BGP AS过滤列表
- 管理感悟:出了问题先怀疑自己
- RS-485接口协议详解
- 软件评测师--第12小时 兼容性测试
- 视觉里程计 特征点法
- 阿里云服务器买完不知道如何使用(新手入门教程)
- MAC怎样显示隐藏文件
- 性能常识 [踩坑总结] nf_conntrack: table full, dropping packet [新]
- WIN7使用手机蓝牙共享网络,及利用蓝牙及WLAN实现双网卡同时上内外网
- 数据分析岗位面试准备请看这篇!
热门文章
- 我的世界服务器淬炼系统,我的世界淬炼指令 | 手游网游页游攻略大全
- 【4】 脑部MRI图像肿瘤分类级别
- 拆掉思维里的墙读书笔记
- 爬虫,爬取猫眼电影Top100的电影名与评分
- Excel技能培训之六-定位功能,隔行插入删除空行,分组插入空行,高亮行列间差异,复制筛选后的数据
- iphone11拍照没有咔嚓声
- 精品软件 推荐 电子书转换器 EPUB to PDF Converter
- JAVA联机版五子棋——源码(一个类一个main暴力开发)
- TypeError: Person() takes no arguments
- A股明日风口:央行工作会议要求推进法定数字货币研发