Longest Ordered Subsequence
#include <iostream>
#include <algorithm>
#define MAX 1010
using namespace std;
int n, arr[MAX], dp[MAX]; // dp[i]: the longest ordered subsequence of the first i numbers
void init() {
for (int i = 0; i < n; i++) {
scanf_s("%d", &arr[i]);
dp[i] = 0;
}
}
void solve() {
int ans = 0;
for (int i = 0; i < n; i++) {
dp[i]++;
for (int j = 0; j < i; j++) {
if (arr[j] < arr[i] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
}
}
ans = max(ans, dp[i]);
}
cout << ans << endl;
}
int main() {
while (cin >> n) {
init();
solve();
}
}