题目:
堆箱子。给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。
输入使用数组[wi, di, hi]表示每个箱子。
示例1:
输入:box = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
输出:6
示例2:
输入:box = [[1, 1, 1], [2, 3, 4], [2, 6, 7], [3, 4, 5]]
输出:10
提示:
- 箱子的数目不大于3000个。
来源:
解题思路:动态规划
此题思路与 俄罗斯套娃信封问题 一致,定义一个数组dp,dp[i]表示以第i个箱子为底的最高高度。对输入数组排序,依次计算dp[i]:
dp[i] = max(dp[0], dp[1], dp[2], ..., dp[i-1]) + box[i].height。(max中的各个dp必须满足箱子叠加条件,为了使公式简洁明了,所以未加这一条件。)
class Solution {
public