两个维度的动态规划
import java.util.*;
public class Main{
    public static void main(String []args){
        Scanner input=new Scanner(System.in);
        int n=input.nextInt();
        int [][]num=new int[n][2];
        for(int i=0;i<n;i++){
            num[i][0]=input.nextInt();
            num[i][1]=input.nextInt();
        }
        Arrays.sort(num,new Comparator<int[]>(){
            public int compare(int[] a,int[] b){
                return a[0]==b[0]?a[1]-b[1]:a[0]-b[0];
            }
        });      
         //两个维度的最长上升子序列
        int[]dp=new int[n];
        Arrays.fill(dp,1);
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
              if((num[j][0]>num[i][0])&&(num[j][1]>num[i][1])){
                  dp[j]=Math.max(dp[j],dp[i]+1);
              }
            }
        }
        int max=0;
        for(int i=0;i<n;i++){
            max=Math.max(max,dp[i]);
        }
        System.out.println(max);
    }

}