/*
最长公共上升子序列
假设正序为a串,逆序为b串,
dp[i]表示以b[i]为结尾的最长公共上升子序列的长度。
*/
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int maxn = 205;
int max(int a,int b){
return a>b?a:b;
}
int dp[maxn];
int main(){
int t;
int n, h[maxn];
scanf("%d", &t);
while(t--){
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", h + i);
memset(dp, 0,sizeof(dp));
int ans = 1;
for(int i = 1; i <= n; ++i){
int temp = 0;
for(int j = n; j> i; --j){
if(h[i] ==h[j]&&dp[j]<temp+1)
dp[j] = temp+ 1;
if(h[i] >h[j])
temp =max(temp , dp[j]);
if(2 * dp[j] + 1 > ans){
ans = dp[j] * 2;
for(int k = i + 1; k < j; ++k)
if(h[k] >h[j])
{
ans++;
break;
}
}
}
}
printf("%d\n", ans);
}
return 0;
}
hdu(4512)
最新推荐文章于 2018-07-09 13:02:18 发布