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之路的主要内容,如果未能解决你的问题,请参考以下文章

codeforce Round #599(Div.2)

leetcode 221. Maximal Square 最大正方形(中等)

[leetcode] 221. 最大正方形

LeetCode | 221. 最大正方形

[LeetCode]最大系列(最大正方形221,最大加号标志764)

leetcode 221. 最大正方形(dp)