题目链接
分析题目可知,这是一个最大上升子序列的模板题,要注意的是,需要正反两个方向都计算一次最大上升子序列取其最大值,因为基德可以向前或者向后一直飞
解题代码为:
(代码没有保存上,只能上y总的代码了)
作者:yxc
链接:https://www.acwing.com/activity/content/code/content/112799/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
int n;
int h[N];
int f[N];
int main()
{
int T;
scanf("%d", &T);
while (T -- )
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &h[i]);
int res = 0;
for (int i = 0; i < n; i ++ )
{
f[i] = 1;
for (int j = 0; j < i; j ++ )
if (h[i] < h[j])
f[i] = max(f[i], f[j] + 1);
res = max(res, f[i]);
}
memset(f, 0, sizeof f);
for (int i = n - 1; i >= 0; i -- )
{
f[i] = 1;
for (int j = n - 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;
}
作者:yxc
链接:https://www.acwing.com/activity/content/code/content/112799/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。