UVA10534-----Wavio Sequence-----动态规划之LIS
题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1475
题目意思:
给你一个序列,告诉你Wavio序列的定义
若一个Wavio序列的长度为2*n+1
前n+1个是递增的
后n+1个是递减的
求出这个序列中的最长的Wavio序列的长度
解题思路:
对序列正着求LIS得出dp1[i]反着求LIS得出dp2[i]分别代表以i为终点的正着的LIS的长度,反着的LIS的长度
然后枚举i,找出最大的min(dp1[i],dp2[i])
长度就是这个*2-1了
另外这题求LIS需要使用n*logn复杂度的算法
详见:http://blog.csdn.net/dangwenliang/article/details/5728363,写的很好
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn = 10000+20; int dp1[maxn];
int dp2[maxn];
int a[maxn];
int d[maxn];
int n; int find(int len,int ai)
{
int left=0;
int right=len;
while(left<=right)
{
int mid=(left+right)>>1;
if(ai>d[mid])
left=mid+1;
else if(ai<d[mid])
right=mid-1;
else
return mid;
}
return left;
} int main()
{
while(~scanf("%d",&n))
{
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
memset(d,0x3f3f3f3f,sizeof(d));
dp1[1] = 1;
d[1]=a[1];
d[0]=-1;
for(int i=2;i<=n;i++)
{
int j=find(n,a[i]);
d[j]=a[i];
dp1[i]=j;
} memset(d,0x3f3f3f3f,sizeof(d));
dp2[n] = 1;
d[1]=a[n];
d[0]=-1;
for(int i=n-1;i>=1;i--)
{
int j=find(n,a[i]);
d[j]=a[i];
dp2[i]=j;
} int ans = -1;
for(int i=1;i<=n;i++)
{
int tmp = min(dp1[i],dp2[i]);
if(ans < tmp*2-1)
ans = tmp*2-1;
}
printf("%d\n",ans);
}
return 0;
}
UVA10534-----Wavio Sequence-----动态规划之LIS的更多相关文章
- UVa10534 - Wavio Sequence(LIS)
题目大意 给定一个长度为n的整数序列,求个最长子序列(不一定连续),使得该序列的长度为奇数2k+1,前k+1个数严格递增,后k+1个数严格递减.注意,严格递增意味着该序列中的两个相邻数不能相同.n&l ...
- UVA10534:Wavio Sequence(最长递增和递减序列 n*logn)(LIS)好题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68553#problem/B 题目要求: Wavio是一个整数序列,具有以下特性 ...
- LIS UVA 10534 Wavio Sequence
题目传送门 题意:找对称的,形如:123454321 子序列的最长长度 分析:LIS的nlogn的做法,首先从前扫到尾,记录每个位置的最长上升子序列,从后扫到头同理.因为是对称的,所以取较小值*2-1 ...
- uva 10534 Wavio Sequence LIS
// uva 10534 Wavio Sequence // // 能够将题目转化为经典的LIS. // 从左往右LIS记作d[i],从右往左LIS记作p[i]; // 则最后当中的min(d[i], ...
- UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)
Wavio Sequence Wavio is a sequence of integers. It has some interesting properties. · Wavio is of ...
- UVA 10534 三 Wavio Sequence
Wavio Sequence Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Sta ...
- HOJ 2985 Wavio Sequence(最长递增子序列以及其O(n*logn)算法)
Wavio Sequence My Tags (Edit) Source : UVA Time limit : 1 sec Memory limit : 32 M Submitted : 296, A ...
- BNUOJ 14381 Wavio Sequence
Wavio Sequence Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Origina ...
- UVa 10534 Wavio Sequence (LIS+暴力)
题意:给定一个序列,求一个最长子序列,使得序列长度为奇数,并且前一半严格递增,后一半严格递减. 析:先正向和逆向分别求一次LIS,然后再枚举中间的那个数,找得最长的那个序列. 代码如下: #pragm ...
- UVa 10534 DP LIS Wavio Sequence
两边算一下LIS就出来了,因为数据比较大,所以需要二分优化一下. #include <iostream> #include <cstdio> #include <cstr ...
随机推荐
- MySQL安装与测试
工作室老师要求我们把MySQL装出来 今天折腾了下,本来不难的,不知道为什么用最新5.6.24的msi安装包,安装的时候选完路径后就没有后续了..蛋疼的我试了好几次,用cmd命令测试一直是 2003- ...
- 返回List的分页方法
cs代码 /// <summary> /// 处理分页检索存储过程(SQL2005) /// </summary> /// & ...
- 如何修改TextField的Label和EmptyText
在需求中常常有修改form表单的标签和空文本提示,在渲染后组件有些字符固定下来 除非使用document进行原始修改,通过查询stackflow,我介绍更方便方法 模拟场景:点击ChangeLabel ...
- Ehcache入门(一)——开发环境的搭建
EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. 那么.如何搭建Ehcache的开发环境呢? 1.下载相关的jar包,这 ...
- JAVA-5-关于for循环的几个例子
打印一个*组成的矩形 public static void main(String[] args) { // TODO 自动生成的方法存根 for (int i = 0; i < 5; i++) ...
- vim编辑器命令
Vim介绍 vim(vimsual)是Linux/Unix系列OS中通用的全屏编辑器. vim分为两种状态,即命令状态和编辑状态,在命令状态下,所键入的字符系统均作为命令来处理,如:q代表退出,而编辑 ...
- 数据库触发器new old
数据库触发器new old: "NEW . column_name"或者"OLD . column_name".这样在技术上处理(NEW | OLD . col ...
- 2016最新一元云购完整源码 云购CMS系统 带安卓和ios手机客户端 源码免费分享
原文转自:http://www.zccode.com/thread-724-1-1.html 该资源说明: 看起来不错的一套一元云购CMS源码,源码包里面带了安卓和ios手机客户端,手机客户端需要自己 ...
- 如何用PowerPoint制作闪烁的星星
在PPT中,PPT动画说是幻灯片PPT中的精华是当之无愧的!ppt文件有了动画,犹如插上翅膀的鸟,让PPT的色彩衍生出了更多的特色.只要你的ppt动画效果制作的对,你的幻灯片将明显与众不同,观众也更容 ...
- web安全:xss && csrf
首先在user.php文件中去除黑名单的第一行标签,在白名单中添加<script>E1:csrf攻击zoobarcsrf:cross-site request forgery 跨站伪 ...