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 ...
随机推荐
- 趣味算法——青蛙过河(JAVA)
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
- gradle命令
gradle tasks 可以显示gradle可以做的任务. gradle build 就会生成jar包. build和clean install的作用是否一致?
- .Net使用SSH.NET通过SSH访问Linux主机
使用了SSH.NET库,添加引用dll至项目,以下代码显示了点击按钮后SSH链接Linux主机执行命令并返回命令执行结果 protected void btnExcute_Click(object s ...
- CentOS 5 64bit 编译安装MySQL报错
报错情况: 在执行./configure时出现configure: error: No curses/termcap library found 解决方法: ./configure时加上参数--w ...
- epoll 中EPOLLIN 和 EPOLLOUT
epoll主要是事件回调运行的,我们使用socket的时候主要使用两个事件 EPOLLOUT事件:EPOLLOUT事件只有在连接时触发一次,表示可写,其他时候想要触发,那你要先准备好下面条件:1.某次 ...
- php中JPGraph入门配置与应用
什么是PHP JPGraph? 专门提供图表的类库.它使得作图变成了一件非常简单的事情.生成非美工人士生成的图表.二维码算法. 到官方网站下载. docportal 帮助手册 src 包含主要代码. ...
- Java中关于String的split(String regex, int limit) 方法
今天在对一个String对象进行拆分的时候,总是无法到达预计的结果.呈现数据的时候出现异常,后来debug之后才发现,错误出在String spilt上,于是开始好好研究下这东西,开始对api里的sp ...
- 转:15 Best Responsive Web Design Testing Tools
Responsive Web Design is regarded as being the approach which suggests that web design and developme ...
- Go http.HandlerFunc()
//http.Handler type Handler interface { ServeHTTP(ResponseWriter, *Request) } type HandlerFunc func( ...
- angularjs directive and component 指令与组件 ( 1.5.0 以后 )
之前写过一篇了 http://www.cnblogs.com/keatkeat/p/3903673.html 但某些部分写的不太清楚,甚至有点错误,所以今天特地在这里再来谈谈. 这篇主要是说指令的隔离 ...