1,牛客网的解题思路:其实这就是求一个最长的递增子序列。 以某一个箱子结尾的最大高度=放在它上面的所有类型中高度最大的那个+他自己的高度。
import java.util.*; public class Box { public int getHeight(int[] w, int[] l, int[] h, int n) { // write code here for (int i = 0; i < w.length; i ++) { for (int j = 1; j < w.length - i; j ++) { if (w[j] < w[j-1]) { swap(w,j,j-1); swap(l,j,j-1); swap(h,j,j-1); } } } int[] dp = new int[n]; dp[0] = h[0]; int max = dp[0]; for (int i = 1; i < n; i ++) { int maxHeight = 0; dp[i] = h[i]; for (int j = i - 1; j >= 0; j --) { if (w[j] < w[i] && l[j] < l[i]) { if (dp[j] > maxHeight) { maxHeight = dp[j]; } } } dp[i] += maxHeight; if (dp[i] > max) { max = dp[i]; } } return max; } public void swap (int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; }}