题目概述
给定N个数num,求其最长严格上升子序列长度
时限
1000ms/3000ms
输入
第一行正整数N,下一行N个非负整数num,输入只有一组
限制
1<=N<=1000;0<=num<=10000
输出
一个数,最长严格上升子序列长度
样例输入
7
1 7 3 5 9 4 8
样例输出
4
讨论
dp,完全就是hdu 1025的终极简化版,那个之前也写过,这里完全不打算解释什么了
由于数据只有一组,因而没有按照平日的格式写代码
题解状态
168K,0MS,C++,564B
题解代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 1002
#define memset0(a) memset(a,0,sizeof(a))
#define EPS 1e-6
int main(void)
{
//freopen("vs_cin.txt", "r", stdin);
//freopen("vs_cout.txt", "w", stdout);
int N, stk[MAXN], top = 0;
scanf("%d", &N);//intput
scanf("%d", &stk[top++]);//input
for (int p = 1; p < N; p++) {
int num;
scanf("%d", &num);
if (num > stk[top - 1])
stk[top++] = num;
else
*lower_bound(stk, stk + top, num) = num;
}
printf("%d\n", top);//output
}
EOF