// 360K 16MS G++
#include <stdio.h>
#include <cstring>
#define MAX 1005
int DP[MAX];
int array[MAX];
int num;
void solve() {
memset(DP, 0, sizeof(DP));
int maxLength = -1;
for (int i = 0; i < num; i++) {
if (i == 0) {
DP[0] = 1;
} else {
DP[i] = 1; // at least array[i] itself is a subsequence
for (int k = 0; k < i; k++) {
if (array[i] > array[k]) {
int res = DP[k] +1;
DP[i] = DP[i] > res ? DP[i]:res;
}
}
}
maxLength = maxLength > DP[i] ? maxLength: DP[i];
}
printf("%d\n", maxLength);
}
int main() {
while(scanf("%d", &num) != EOF) {
for (int i = 0; i < num; i++) {
scanf("%d", array + i);
}
solve();
}
}
经典的DP最长递增序列题,没啥说的,完全是定式了.
刷题指南应该把这道题放在DP类的最前,前面的1836明明比2533还要复杂的运用最长序列。