题解 | #合唱队形#
信封嵌套
http://www.nowcoder.com/practice/25fe1fc89c4c4e82bbc63df04bc6ca30
两个维度的动态规划
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); } }