leetcode.1691 堆叠长方体的最大高度 - dp + 排序

news2024/11/15 21:42:38

1691. 堆叠长方体的最大高度

目录

1、java 

2、c++ 


思路:

根据题目描述,长方体 j 能够放在长方体 i 上,当且仅当w_{j}\leqslant w_{i}   l_{j}\leqslant l_{i}   h_{j}\leqslant h_{i}

  • 题目允许旋转长方体,也就是可以选择长方体的任意一边作为长方体的高。

  • 对于任意一种合法的堆叠,如果我们把里面每个长方体都旋转至w\leqslant l\leqslant h,堆叠仍然是合法的,并且能够保证堆叠的高度最大化。

  • 我们可以把所有长方体的边长进行排序,使得每个长方体满足w\leqslant l\leqslant h。然后将每个长方体升序排列。

  • 定义dp[i]  以第i个长方体为底能得到的最大高度和

  • 枚举每个长方体 i 的上方的长方体 j,其中j<i

  • 如果 j 可以放在 i 的上方,那么我们可以得到状态转移方程:

                      dp[i]=max(dp[i],dp[j]+h[i])

  • 最后答案就是 max(dp[i])

1、java 

class Solution {
    public int maxHeight(int[][] c) {
        int n=c.length;
        int res=0;
        int[] dp=new int[n+1];
        //dp[i]  以第i个长方体为底能得到的最大高度和
        for(int[] x:c) Arrays.sort(x); //将每个长方体按 w≤l≤h 排序
        //将所有长方体按 wj≤wi lj≤li hj≤hi 排列
        Arrays.sort(c,(a,b)->a[0]==b[0]? (a[1]==b[1]? a[2]-b[2]:a[1]-b[1]):a[0]-b[0]); 
        for(int i=0;i<n;i++)
        {
            dp[i]=c[i][2];
            for(int j=0;j<i;j++)
                if(c[j][1]<=c[i][1]&&c[j][2]<=c[i][2])
                    dp[i]=Math.max(dp[i],dp[j]+c[i][2]);
            res=Math.max(res,dp[i]);
        }
        return res;
    }
}

2、c++ 

class Solution {
public:
    int maxHeight(vector<vector<int>>& cub) {
        int n = cub.size(), ans = 0; 
        vector<int> dp(n,0);
        for (auto& t : cub) sort(t.begin(), t.end());
        sort(cub.begin(), cub.end(), [](vector<int>& a, vector<int>& b){ return a[0] == b[0] ? (a[1] == b[1] ? a[2] < b[2] : a[1] < b[1]) : a[0] < b[0];});
        for (int i = 0; i < n; i++) { 
            dp[i] = cub[i][2];
            for (int j = 0; j < i; j++) 
                if(cub[i][1]>=cub[j][1] && cub[i][2]>=cub[j][2]) 
                    dp[i] = max(dp[i], dp[j] + cub[i][2]);
            
            ans = max(dp[i], ans);
        }
        return ans;
    }
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊一聊三级等保

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 聊一聊三级等保 - joshua317的博客 一、前言 1.1 基本认知 网络安全&#xff1a;根据《信息安全技术网络安全等级保护基本要求》&#xff08;GB/T 22239-2019&#xff09;&#xff0c;是指通过采取必要措…

m基于功率谱,高阶累积量和BP神经网络-GRNN网络的调制方式识别仿真,对比2psk,4PSK,2FSK以及4FSK

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 首先区分大类的话采用的基于功率谱提取的len参数&#xff08;峰值频率间隔&#xff09;&#xff0c;用峰值个数来代替&#xff0c;这样能很好的区分大类把MFSK和MPSK信号区分开。 针对MPSK&…

VSCode-远程连接服务器进行开发

一&#xff1a;安装插件 二&#xff1a;设置SSH 按照划线位置依次配置要连接的服务器配置 三&#xff1a;打开远程连接选项 勾选此选项后即可显示配置好的远程服务器&#xff0c;点击登录即可。 输入服务器用户密码 注意 &#xff1a;终端框install不要关闭&#xff01;&#…

基于MPS算法和改进的非支配排序遗传算法II(MNSGA-II)求解配备起重机的模糊鲁棒设施布局问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【C语言航路】第八站:调试(第二幕)

目录 四、一些调试的实例 1.实例一 2.实例二 五、如何写出优秀的&#xff0c;易于调试的代码 1.优秀的代码 2.几个经典的例子 &#xff08;1&#xff09;模拟实现strcpy函数 &#xff08;2&#xff09;模拟实现strlen 六、编程常见的错误 1.编译型错误 2.链接型错误 …

Spring学习:学完总结

前言&#xff1a; 此次学习大概花了6天的时间&#xff0c;不过只是浅浅的学到了皮毛&#xff0c;所以后面有新的理解就会持续更新&#xff01;下面是一些重点总结。 总结&#xff1a; 一、Spring概述 1.1 什么是Spring &#xff08;1&#xff09;全称&#xff1a;EJB(sun企…

alibaba微服务组件sentinel

alibaba微服务组件sentinel 官方文档&#xff1a;https://sentinelguard.io/zh-cn/docs/introduction.html 官方示例&#xff1a;https://github.com/alibaba/Sentinel/tree/master/sentinel-demo 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Senti…

MYSQL数据库-索引

MYSQL数据库-索引零、前言一、索引概念二、认识磁盘三、理解索引1、如何理解Page2、B vs B3、聚簇索引 VS 非聚簇索引4、普通索引5、总结四、索引操作1、创建索引2、查询索引3、删除索引零、前言 本章主要讲解MYSQL数据库中的索引这一重要知识点 一、索引概念 索引的价值&…

Allegro如何打印光绘层操作指导Plot模式

Allegro如何打印光绘层操作指导Plot模式 Allegro支持把视图打印成pdf格式的文件,下面介绍用plot模式打印,具体操作如下 打开光绘设置 确保光绘设置都是正确的 选择file-plot setup 出现打印设置的参数,常规默认即可,如果需要打印黑白的,选择Black and white 选择ok …

无人机无线传感器网络中的节能数据采集(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【LeetCode】1691. 堆叠长方体的最大高度

题目描述 给你 n 个长方体 cuboids &#xff0c;其中第 i 个长方体的长宽高表示为 cuboids[i] [widthi, lengthi, heighti]&#xff08;下标从 0 开始&#xff09;。请你从 cuboids 选出一个 子集 &#xff0c;并将它们堆叠起来。 如果 widthi < widthj 且 lengthi < le…

React学习笔记:组件

组件 将页面按照界面功能进行拆分&#xff0c;每一块界面都拥有自己的独立逻辑&#xff08;组件&#xff09;&#xff0c;这样可以提高项目代码的可维护性和复用性。 如上图所示将这个卡片分为三个组件&#xff0c;那么当需要添加一个这样的卡片时&#xff0c;就可以复用这些…

【Java进阶篇】第八章 反射与注解

文章目录一、反射机制概述1、作用2、相关类二、反射1、获取Class的三种方式2、通过反射机制实例化对象3、forName方法的另一个应用4、获取类路径下文件的绝对路径5、资源绑定器ResourceBundle6、类加载器三、反射与反编译1、获取Field2、反编译Field3、通过反射机制访问对象的属…

Akka 学习(七)Actor的生命周期

在Actor的生命周期中会调用几个方法&#xff0c;我们在需要时可以重写这些方法。 ● prestart()&#xff1a;在构造函数之后调用。 ● postStop()&#xff1a;在重启之前调用。 ● preRestart(reason, message)&#xff1a;默认情况下会调用postStop()。 ● postRestart()&…

D/A转换器

性能指标&#xff1a;转换精度&#xff0c;转换速度 相互之间是矛盾的&#xff0c;精度越高&#xff0c;相比而言速度就会慢一些 权电阻网络D/A转换器 阻值的选取是按照二进制的位权来选择的&#xff0c;所以我们看到了这个结构&#xff0c;和我们刚才分析的是一致的 权电阻网…

基于花授粉算法优化的lssvm回归预测-附代码

基于花授粉算法优化的lssvm回归预测 - 附代码 文章目录基于花授粉算法优化的lssvm回归预测 - 附代码1.数据集2.lssvm模型3.基于花授粉算法优化的LSSVM4.测试结果5.Matlab代码摘要&#xff1a;为了提高最小二乘支持向量机&#xff08;lssvm&#xff09;的回归预测准确率&#xf…

c++11 std::thread和mutex用法

c11 std::thread和mutex用法thread和mutex用法thread简单示例thread构造函数梳理thread关键成员函数mutex使用thread和mutex用法 本文对c 11中的std::thread 和 mutex作简要的使用说明 thread简单示例 #include <iostream> #include <string> #include <thre…

mysql性能监控

一.使用show profile查询剖析工具&#xff0c;查看mysql语句执行时间&#xff1a; 官网&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/show-profile.html mysql -uroot -p //进入数据库服务器 use 数据库名 //进入数据库 set profiling1; //开启profiling参数 select…

Python基础(十二):字典的详细讲解

文章目录 字典的详细讲解 一、字典的应用场景 二、创建字典的语法

具身智能综述和应用(Embodied AI)

什么是具身智能&#xff1f; 目前人工智能的进展&#xff0c;在诸多数据源和数据集&#xff08;Youtube、Flickr、Facebook&#xff09;、机器计算能力&#xff08;CPU、GPU、TPU&#xff09;的加持下&#xff0c;已经在CV、NLP上取得了许多任务&#xff08;如目标检测、语义分…