9.10---堆箱子问题(CC150)

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;
    }
}
View Code
原文地址:https://www.cnblogs.com/yueyebigdata/p/5099596.html