一、题目
二、分析
动态规划里的经典问题。重在DP思维。
如果用最原始的DP思想做,状态转移方程为$DP[i] = max(DP[j] + 1)$,$j$满足$j<i$,且$a[i]>a[j]$。
三、AC代码
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <cmath> 7 8 using namespace std; 9 #define ll long long 10 #define Min(a,b) ((a)>(b)?(b):(a)) 11 #define Max(a,b) ((a)>(b)?(a):(b)) 12 const int MAXN = 1000; 13 int A[MAXN + 13], Len; 14 15 int main() 16 { 17 int N; 18 while(scanf("%d", &N) != EOF) { 19 int data; 20 Len = 0; 21 for(int i = 0; i < N; i++) { 22 scanf("%d", &data); 23 if(!Len) 24 A[Len++] = data; 25 else { 26 int p = lower_bound(A, A + Len, data) - A; 27 if(p == Len) 28 Len++; 29 A[p] = data; 30 } 31 } 32 printf("%d ", Len); 33 } 34 return 0; 35 }