样例输入:
3
8
300 207 155 299 298 170 158 65
8
65 158 170 298 299 155 207 300
10
2 1 3 4 5 6 7 8 9 10
样例输出:
6
6
9
分析:o(n*n)的最长上升子序列模型 直接上代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=110;
int sz[N];
int dp[N];
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>sz[i];
}
int res=0;
for(int i=0;i<n;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(sz[i]>sz[j]) dp[i]=max(dp[j]+1,dp[i]);
}
res=max(res,dp[i]);
}
for(int i=n-1;i>=0;i--){
dp[i]=1;
for(int j=n-1;j>i;j--){
if(sz[i]>sz[j]) dp[i]=max(dp[j]+1,dp[i]);
}
res=max(res,dp[i]);
}
cout<<res<<endl;
}
return 0;
}