uva10534---Wavio Sequence
来源:互联网 发布:ubuntu 自动打开u盘 编辑:程序博客网 时间:2024/05/17 04:49
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=17&problem=1475&mosmsg=Submission+received+with+ID+13386999
Wavio is a sequence of integers. It has some interestingproperties.
· Wavio is of odd length i.e. L = 2*n+ 1.
· The first (n+1) integers ofWavio sequence makes a strictly increasing sequence.
· The last (n+1) integers of Waviosequence makes a strictly decreasing sequence.
· No two adjacent integers are same in aWavio sequence.
For example 1, 2, 3, 4, 5, 4, 3, 2, 0 is an Waviosequence of length9. But 1, 2, 3, 4, 5, 4, 3, 2, 2 is not avalid wavio sequence. In this problem, you will be given a sequence ofintegers. You have to find out the length of the longest Wavio sequence whichis a subsequence of the given sequence. Consider, the given sequence as :
1 2 3 2 1 2 3 4 32 1 5 4 1 2 3 2 2 1.
Here the longest Wavio sequence is : 1 2 3 4 5 4 3 2 1. So, the outputwill be9.
Input
The input filecontains less than 75 test cases. The description of each test case isgiven below: Input is terminated by end of file.
Each set starts with a postiveinteger, N(1<=N<=10000). In next few lines there will beNintegers.
Output
For each set of input print the length of longest waviosequence in a line.
Sample Input Output for Sample Input
10
1 2 3 4 5 4 3 2 1 10
19
1 2 3 2 1 2 3 4 3 2 1 5 4 1 2 3 2 2 1
5
1 2 3 4 5
9
9
1
这道题主要是LIS的应用,把串正反走一遍就行,代码中LIS()函数是精华。
代码实现:
#include <iostream>#include <cstring>using namespace std;#define N 10001int dp1[10001],dp2[10001],a[10001],b[10001];int t;void LIS(int dp[],int a[]){ int stack[N]; int top=0; stack[top]=-99999999; for(int i=1; i<=t; i++) { //如果a[i]>栈顶部元素,则压栈 if(a[i]>stack[top]) { stack[++top]=a[i]; dp[i]=top; } //如果a[i]不大于栈顶部元素,则二分查找第一个比a[i]大的元素 else { int l=1,r=top; while(l<=r) { int mid=(l+r)>>1; if(a[i]>stack[mid]) { l=mid+1; } else r=mid-1; } //替换a[i] stack[l]=a[i]; dp[i]=l; } }}int main(){ while(cin>>t) { for(int i=1;i<=t;i++) { cin>>a[i]; b[t-i+1]=a[i]; } memset(dp1,0,sizeof(dp1)); memset(dp2,0,sizeof(dp2)); LIS(dp1,a); LIS(dp2,b); int maxx=-1,ans=0; for(int i=1;i<=t;i++) { ans=min(dp1[i],dp2[t-i+1])*2-1; if(ans>maxx) { maxx=ans; } } cout<<maxx<<endl; } return 0;}
- Wavio Sequence UVA10534
- UVA10534 wavio sequence
- UVA10534 Wavio Sequence
- uva10534---Wavio Sequence
- UVa10534 Wavio Sequence
- UVa10534 Wavio Sequence
- UVA10534 - Wavio Sequence - 动态规划
- UVA10534-Wavio Sequence(LIS)
- UVA10534-----Wavio Sequence-----动态规划之LIS
- UVA10534[Wavio Sequence] 动态规划 LIS
- uva10534 - Wavio Sequence(动归,最长上升子序列)
- uva10534 - Wavio Sequence O(nlgn)的最长上升子序列
- UVA10534 Wavio Sequence(二分 + 最长上升子序列)
- 波浪子序列 Wavio Sequence UVA10534 动态规划 最长上升子序列变形
- Wavio Sequence
- Wavio Sequence
- uva 10534 Wavio Sequence
- UVa 10534. Wavio Sequence
- 《Go语言程序设计》第6章练习
- 港版iPhone
- 数据结构之排序和查找
- 修改Win8.1计算机中设备分组样式
- Codeforces 367A Sereja and Algorithm
- uva10534---Wavio Sequence
- 数据结构课有感---反对计算机教学PPt化、纸上谈兵化
- 管理制度之我见
- linux 下模块的编译和安装
- C++ stringstream类 用法概论
- 第五周项目1-三角形类的构造函数(选作)
- UILabel上的字可以多行显示
- codeforces 405A Gravity Flip (模拟题,简单)
- 前景检测vibe(二)