描述
堆箱子。给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。
输入使用数组[wi, di, hi]表示每个箱子。
分析
此题是变种的300. 最长上升子序列,比较的维度由一维变成了三维。
- 首先按照一个维度去排序,不排序会遗漏本可以堆放的箱子。
- 在排序后的数组里找到累加和最高的箱子,便是答案。
- dp[i]表示以box[i][]为底的最高堆放高度。
- dp[i]等于在他前面且三个维度都比他矮的箱子里面dp[]值最高的dp值加上它自身的高度。
- dp[i]可以不用初始化,默认零就行。
class Solution {
public int pileBox(int[][] box) {
Arrays.sort<