VUa15034:
题意:给定一串数字,求解上升递减子序列,简单理解就是前n上升,后n个下降,中间一个作为公共点,总的长度就是2n-1。
方法:利用LIS(最长上升子序列的方法变形),先从0到n-1求解每个以i结尾的最长上升系序列,再从n-1到n求解每个i对应的最长上升子序列(下降从后往前看就是上升)。得到两个数组d和di 的d[i],d1[i]分别表示以i结束的最长上升子序列和以i开始的最长递减子序列,所以最大的上升下降子序列的长度ans=max(ans, min( d[ i ], d1[ i ] ) ) 如:的d[ i ]=5,d1[ i ]=6我们只能取5,答案就是9
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int M=10000+5;
const int INF=1000000;
int num[M];