rendered paste bodyimport java.util.*;
public class LISDPDemo {
private static Vector < Integer > X = new Vector < Integer > ();
private static Vector < Integer > memo = new Vector < Integer > ();
private static int N;
private static int LIS(int i) {
if (i == N - 1) return 1;
if (memo.get(i) != -1) return memo.get(i);
int ans = 1;
for (int j = i + 1; j < N; j++)
if (X.get(i) < X.get(j))
ans = Math.max(ans, LIS(j) + 1);
memo.set(i, ans);
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
X.clear(); X.addAll(Collections.nCopies(N, 0));
for (int i = 0; i < N; i++)
X.set(i, sc.nextInt());
memo.clear(); memo.addAll(Collections.nCopies(N, -1)); // to say 'not filled yet'
System.out.printf("LIS = %d\n", LIS(0));
}
}