当前位置: 首页 > news >正文

算法笔试-编程练习-好题-04

题目:堆盒子

礼盒大小不同,我们玩堆盒子的游戏,怎么堆盒子使得堆出的高度最高,每个礼盒的大小由长、宽、高表示,堆盒子的时候要求下面的盒子长、宽、高都必须大于上面的盒子,不包含等于。高度为堆出的礼盒的所有高度的总和。

输入描述

输入的第一行是礼盒的个数N,

接下来输入N行,每行表示每个礼盒的长、宽、高。

礼盒的数量不超过1000个,每个盒子的长、宽、高取值范围为1~10。

输出描述

输出一行,输出能堆出盒子的最高高度

样例

输入

4
1 1 1
2 3 4
3 6 7
4 5 6

输出

12

说明

选择1、2、33个盒子堆出的高度最高,1+4+7=12

题目分析:

【题目类型:动态规划,多维动规】

我们按照盒子从小到大的顺序计算动态规划,维护一个DP[l][w][h]的三维数组,用来描述最大的盒子的尺寸为l、w、h时的最大总高度。

状态转移方程为如果存在高度为h的盒子,那么DP[l][w][h] = max(DP[l-1][w][h], DP[l][w-1][h],DP[l][w][h-1], DP[l-1][w-1][h-1]+h ),若不存在则去掉最后一种情况,DP[l][w][h] = max(DP[l-1][w][h], DP[l][w-1][h],DP[l][w][h-1])

代码:

n = int(input())
grid = [[[] for _ in range(11)] for __ in range(11)]
DP = [[[0 for _ in range(11)] for __ in range(11)] for ___ in range(11)]
for _ in range(n):l, w, h = map(int,input().split())grid[l][w].append(h) # for g in grid:
#     print(g)for l in range(1, 11):for w in range(1, 11):for h in range(1, 11):if h in grid[l][w]:DP[l][w][h] = max(DP[l-1][w][h], DP[l][w-1][h], DP[l][w][h-1], DP[l-1][w-1][h-1]+h)else:DP[l][w][h] = max(DP[l-1][w][h], DP[l][w-1][h], DP[l][w][h-1])print(max(DP[10][10]))

http://www.lryc.cn/news/438292.html

相关文章:

  • 使用Rustup快速无缝升级Rust
  • pytorch qwen2-vl自定义数据全量微调
  • 切换淘宝最新npm镜像源是
  • 全国历年高考真题2008-2024
  • 【vue-media-upload】一个好用的上传图片的组件,注意事项
  • linux第一课(操作系统核心)
  • 【期末复习】软件项目管理
  • C# List定义和常用方法
  • 如何在实际应用中更好地利用字典功能提高开发效率?
  • Windows 环境下 vscode 配置 C/C++ 环境
  • [通信原理]绪论2:信息量 × 信息熵
  • TCP套接字【网络】
  • 【devops】devops-git之github使用
  • GPT对话知识库——串口通信的数据的组成?起始位是高电平还是低电平?如何用代码在 FreeRTOS 中实现串口通信吗?如何处理串口通信中的数据帧校验吗?
  • 从头开始学MyBatis—02基于xml和注解分别实现的增删改查
  • AI音乐创作的新时代:从创意到旋律的智能化转型
  • Spring Boot集成Akka remoting快速入门Demo
  • JVM 调优篇7 调优案例1-堆空间的优化解决
  • 文件格式转换:EXCEL和CSV文件格式互相转换
  • 基于协同过滤的北京森林公园推荐---附源码74454
  • 002 JavaClent操作RabbitMQ
  • lablelme标注的数据转成YOLO v8 格式
  • 【linux】cat 命令
  • 速通sass基础语法
  • Vue: watch5种监听情况
  • Android 车联网——汽车系统介绍(附2)
  • C++ 链表
  • 中国初创公司数量下降了98%
  • 【SSRF漏洞】——http协议常见绕过
  • [网络][CISCO]CISCO_华为网络设备端口镜像配置