题目链接
题目思路
由于怪盗基德既可以往左滑 又可以往右滑
所以用一遍最长上升子序列 再用一遍最长下降子序列求最大值即可得最优解
通过代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 110;
int n;
int h[N], f[N];
int main()
{
int t;
cin >> t;
while (t -- )
{
int res = 0;
cin >> n;
for (int i = 1; i <= n; i ++ ) cin >> h[i];
for (int i = 1; i <= n; i ++ )
{
f[i] = 1;
for (int j = 1; j < i; j ++ )
{
if (h[i] < h[j]) f[i] = max(f[i], f[j] + 1);
}
res = max(res, f[i]);
}
for (int i = 1; i <= n; i ++ )
{
f[i] = 1;
for (int j = 1; j < i; j ++ )
{
if (h[i] > h[j]) f[i] = max(f[i], f[j] + 1);
}
res = max(res, f[i]);
}
printf("%d\n", res);
}
return 0;
}