题解
题目已经说明 使用最长上升子序列求解。。
AC代码
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e3 + 10;
int d[MAXN], a[MAXN]; //长度为i的最小数值
int main()
{
#ifdef LOCAL
freopen("C:/input.txt", "r", stdin);
#endif
int n;
while (cin >> n)
{
memset(d, 0x3f, sizeof(d));
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)
{
int j = lower_bound(d + 1, d + n + 1, a[i]) - d;
d[j] = min(d[j], a[i]);
}
int m = lower_bound(d + 1, d + n + 1, INF) - d - 1;
cout << m << endl;
}
return 0;
}