华为OD机考 书籍叠放给定一组书的长宽,并且只有当一本书的长宽同时小于另一本书的长宽时,两书才能叠放在一起,求该组书中最多能有多少本书叠放在一起输入:[[20,16],[15,11],[10,10],[9,10]]输出:3,前三本可叠放在一起import java.util.Arrays;import java.util.Scanner;public class dieShu {public static void main(String[] args) {Scanner in = new Scanner(System.in);String s = in.nextLine().replaceAll("\\[", "").replaceAll("\\]", "");String[] str = s.split(",");int[][] nums = new int[str.length / 2][2];for (int i = 0; i < nums.length; i++) {nums[i][0] = Integer.parseInt(str[i * 2]);nums[i][1] = Integer.parseInt(str[i * 2 + 1]);}Arrays.sort(nums, (a, b) -> (a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]));int[] dp = new int[nums.length];Arrays.fill(dp, 1);int res = 0;for (int[] num : nums) {int left = 0, right = res;while (left < right) {int mid = (right - left ) / 2 + left;if (dp[mid] < num[1]) {left = mid + 1;} else{right = mid;}}dp[left] = num[1];if (left == res) {res++;}}System.out.println(res);}}有没有大佬给我解释下这玩意到底是啥意思,贪心加二分,dp【0】存放最长子序列长度为1的尾数,怎么比较得到最后答案len的长度的,看了半天没看懂