LeetCode 1691 堆叠长方形的最大高度排序 动态规划 HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1691 堆叠长方形的最大高度排序 动态规划 HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
为了达到最大高度,那么把每个长方形的最长的边作为高度即可,那么对于每个cuboid,对齐内部进行一个排序,这样cuboid[i][2]就是最大值,即可作为高度,然后为了更好遍历,即在遍历阶段,我们对于当前遍历到的长方形,那么能作为该长方形滴的长方形,其下标一定比该长方形的下标大,这很容易实现,只要按照每个长方形的长宽高的和进行排序即可。最后构造dp数组,dp[i]表示以下标i为底的长方形,所能堆叠的最高的高度,代码如下:
class Solution
public:
int maxHeight(vector<vector<int>>& cuboids)
int n = cuboids.size();
// 保证每个正方体按照从小到大排序
for(auto& cuboid : cuboids)
sort(cuboid.begin(), cuboid.end());
// 保证大的下标更大
sort(cuboids.begin(), cuboids.end(), [&](const vector<int>& a, const vector<int>& b)
return a[0] + a[1] + a[2] < b[0] + b[1] + b[2];
);
int ans = 0;
vector<int> dp(n, 0);
for(int i = 0; i < n; i ++)
dp[i] = cuboids[i][2];
for(int j = 0; j < i; j ++)
if(cuboids[j][0] <= cuboids[i][0] &&
cuboids[j][1] <= cuboids[i][1] &&
cuboids[j][2] <= cuboids[i][2])
dp[i] = max(dp[i], dp[j] + cuboids[i][2]);
ans = max(ans, dp[i]);
return ans;
;
以上是关于LeetCode 1691 堆叠长方形的最大高度排序 动态规划 HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 221. Maximal Square 最大正方形(中等)