Uva 10534 波浪子序列】的更多相关文章

题目链接:https://vjudge.net/contest/160916#problem/C 题意: 求一个奇数长的子序列,前一半严格递增,后一半严格递减:O(nlogn) 分析: 再次复习一下LIS算法: 严格递增: g[k] : d[]值为 k 的最小元素,由于是严格递增,也就是说二分下界low_bound: 最长不下降: 也就是说upper_bound: 解析:二分函数,返回值是[L,R),也就是说不下降的时候,就是在后面插入一个: #include <bits/stdc++.h>…
https://vjudge.net/problem/UVA-10534 题意:给定一个长度为n的整数序列,求一个最长子序列(不一定连续),使得该序列的长度为2k+1,前k+1个数严格递增,后k+1个数严格递减. 思路: 先正着求一遍LIS,再反着求一遍LIS. 当然求法是得采用O(nlogn)的求法,这个网上有很多解释,我就不多介绍了. 最后的话枚举一遍就可以了,详见代码. #include<iostream> #include<algorithm> #include<cs…
题目传送门 题意:找对称的,形如:123454321 子序列的最长长度 分析:LIS的nlogn的做法,首先从前扫到尾,记录每个位置的最长上升子序列,从后扫到头同理.因为是对称的,所以取较小值*2-1再取最大值 代码: /************************************************ * Author :Running_Time * Created Time :2015-8-5 21:38:32 * File Name :UVA_10534.cpp ******…
Wavio Sequence Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 10534 #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int inf=0x3f3f3f3f; int mai…
// uva 10534 Wavio Sequence // // 能够将题目转化为经典的LIS. // 从左往右LIS记作d[i],从右往左LIS记作p[i]; // 则最后当中的min(d[i],p[i])就是这个波动序列的一半 // 在这最后的min(d[i],p[i]) * 2 + 1 的最大值就是我们所要求的答案 // // 这题開始想的最后的答案是d[i]==p[i]的时候求最大. // 可是这样是不正确的,比如n=4, // 1,3,1,0 // 最长的应该是3,可是我的答案是1,…
在给定序列中寻找一个1~n+1递增,n~2n+1递减的序列,我的想法是直接对原序列和原序列的反序列用nlgn算法求递增序列,例如序列a[]={1,2,4,1,2,6},它的反序列为b[]={6,2,1,4,2,1},序列a的上升数组为aa[]={1,2,3,1,2,4},序列b的上升数组为bb[]={1,1,1,2,2,1},然后枚举从下标0~5,得到最长满足条件的序列: for(int i=0;i<n;++i){ int cnt=min(aa[i],bb[n-1-i]); //aa[i]就是当…
Wavio Sequence  Wavio is a sequence of integers. It has some interesting properties. ·  Wavio is of odd length i.e. L = 2*n + 1. ·  The first (n+1) integers of Wavio sequence makes a strictly increasing sequence. ·  The last (n+1) integers of Wavio s…
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=17&page=show_problem&problem=1475 Dynamic Programming. 最长增长子序列.推荐一个链接:http://www.cnblogs.com/liyukuneed/archive/2013/05/26/3090402.html.按照链接里的方法三(其他的会有TLE…
一开始WA了  参考了一下   求正反两个方向的最长上升子序列  并分别记录在两个数组中  最后求最大值 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a[10010],c1[10010],c2[10010],d[10010]; int cc(int n, int& i) { if(i ==…
题意:给定一个序列,求一个最长子序列,使得序列长度为奇数,并且前一半严格递增,后一半严格递减. 析:先正向和逆向分别求一次LIS,然后再枚举中间的那个数,找得最长的那个序列. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cstdio> #include <string> #include <cstdlib> #include <cmath>…