记忆化搜索
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static int[] cache;
public static int dp(int[] arr, int i){
//cache
if(cache[i]>1)
return cache[i];
//take a step
for(int j=0;j<i;j++){
if(arr[i]>arr[j])
cache[i]=Math.max(cache[i],1+dp(arr,j));
}
return cache[i];
}
public int lengthOfLIS(int[] nums) {
//init
cache = new int[nums.length];
for(int i=0;i<nums.length;i++){
cache[i]=1;
}
//res
int max = Integer.MIN_VALUE;
for(int i=0;i<nums.length;i++)
max=Math.max(max,dp(nums,i));
return max;
}
public static void main(String[] args) throws IOException {
//input init
Scanner sc = new Scanner(System.in);
Main main = new Main();
int n = sc.nextInt();
int[] nums = new int[n];
for(int i=0;i<n;i++){
nums[i]=sc.nextInt();
}
int res = main.lengthOfLIS(nums);
System.out.println(res);
}
}