LIS问题,如果题目没有规定顺序的话,应该排序之后再动态规划,这样可以保证最后的值为最优解。
import java.util.*; public class Stack { public int getHeight(int[][] actors, int n) { int[] dp = new int[n]; int max = 1; Arrays.fill(dp,1); // 这里用Comparator对身高进行排序 Arrays.sort(actors, new Comparator<int[]>() { @Override public int compare(int[] ints, int[] t1) { return ints[0] - t1[0]; } }); // 求最长子序列 for (int i = 1; i < n; i++) { int x= actors[i][0]; int y= actors[i][1]; for (int m = 0; m < i; m++) { if(x > actors[m][0] && y > actors[m][1]){ int k = dp[m] + 1; dp[i] = k>dp[i]?k:dp[i]; } } max = dp[i]>max?dp[i]:max; } return max; } }