两个维度的动态规划
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);
}
}

京公网安备 11010502036488号