UVA437 巴比伦塔 The Tower of Babylon

UVA437 巴比伦塔 The Tower of Babylon

题面翻译

题目描述

你可能已经听说过巴比伦塔的传说。现在这个传说的许多细节已经被遗忘。所以本着本场比赛的教育性质,我们现在会告诉你整个传说:

巴比伦人有 n n n 种长方形方块,每种有无限个,第 i i i 种方块的三边边长是 x i , y i , z i xi,yi,zi xi,yi,zi。对于每一个方块,你可以任意选择一面作为底,这样高就随着确定了。举个例子,同一种方块,可能其中一个是竖着放的,一个是侧着放的,一个是横着放的。

他们想要用堆方块的方式建尽可能高的塔。问题是,只有一个方块的底的两条边严格小于另一个方块的底的两条边,这个方块才能堆在另一个上面。这意味着,一个方块甚至不能堆在一个底的尺寸与它一样的方块的上面。

你的任务是编写一个程序,计算出这个塔可以建出的最高的高度。

输入格式

输入会包含至少一组数据,每组数据的第一行是一个整数 n ( n ≤ 30 ) n(n\le30) n(n30),表示方块的种类数。 这组数据接下来的 n n n 行,每行有三个整数,表示 x i , y i , z i xi,yi,zi xi,yi,zi。输入数据会以 0 0 0 结束。

输出格式

对于每组数据,输出一行,其中包含组号(从 1 1 1 开始)和塔最高的高度。按以下格式:Case i: maximum height = __

题目描述

PDF

输入格式

输出格式

样例 #1

样例输入 #1

1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0

样例输出 #1

Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342

Solution

因为方块数目不限,每一个方块有长宽高三个参数,方块放置有6种方式分别为:

  1. x,y,z
  2. y,x,z
  3. y,z,x
  4. z,y,x
  5. z,x,y
  6. x,z,y

设dp[i]表示第i个方块可以放置的最大高度,则可以建立状态转移方程,在满足一个方块的底的两条边严格小于另一个方块的底的两条边的情况下,有状态转移方程dp[i] = max(dp[j] + blocks[i].getHigh(), dp[i]);

其中对blocks进行排序是因为只有保证上层的块的底面积严格小于下层的块的时候,才可以将上层的块放到下层的块上

//
// Created by Gowi on 2023/11/24.
//#include <iostream>
#include <cstring>
#include <algorithm>#define N 200using namespace std;class block {
private:int x, y, z, area, high;
public:block() {};block(int a, int b, int c) {x = a;y = b;z = c;area = a * b;high = c;}bool operator<(block a) const {return this->area <= a.area;}int getX() const {return x;}void setX(int x) {block::x = x;}int getY() const {return y;}void setY(int y) {block::y = y;}int getZ() const {return z;}void setZ(int z) {block::z = z;}int getArea() const {return area;}void setArea(int area) {block::area = area;}int getHigh() const {return high;}void setHigh(int high) {block::high = high;}
};int n, t;
block blocks[N];
int dp[N];bool init() {t = 0;cin >> n;if (n == 0) {return false;}memset(blocks, 0, sizeof(blocks));memset(dp, 0, sizeof(dp));for (int i = 0; i < n; ++i) {int a, b, c;cin >> a >> b >> c;blocks[t++] = block(a, b, c);blocks[t++] = block(b, a, c);blocks[t++] = block(b, c, a);blocks[t++] = block(c, b, a);blocks[t++] = block(c, a, b);blocks[t++] = block(a, c, b);}sort(blocks, blocks + t);return true;
}int main() {int k = 0;while (init()) {int maxheight = 0;for (int i = t - 1; i >= 0; i--) {dp[i] = blocks[i].getHigh();for (int j = t - 1; j >= 0; j--) {if (blocks[i].getX() < blocks[j].getX() && blocks[i].getY() < blocks[j].getY()) {dp[i] = max(dp[j] + blocks[i].getHigh(), dp[i]);}}if (dp[i] > maxheight) {maxheight = dp[i];}}cout << "Case " << ++k << ": maximum height = " << maxheight << endl;}return 0;
}

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

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

相关文章

Linux加强篇003-管道符、重定向与环境变量

目录 前言 1. 输入输出重定向 2. 管道命令符 3. 命令行的通配符 4. 常用的转义字符 5. 重要的环境变量 前言 悟已往之不谏&#xff0c;知来者之可追。实迷途其未远&#xff0c;觉今是而昨非。舟遥遥以轻飏&#xff0c;风飘飘而吹衣。问征夫以前路&#xff0c;恨晨光之熹…

使用Pytorch从零开始构建Conditional PixelCNN

条件 PixelCNN PixelCNN 是 PixelRNN 的卷积版本&#xff0c;它将图像中的像素视为一个序列&#xff0c;并在看到前面的像素后预测每个像素&#xff08;定义如上和左&#xff0c;尽管这是任意的&#xff09;。PixelRNN 是图像联合先验分布的自回归模型&#xff1a; p ( x ) …

【开源】基于Vue和SpringBoot的食品生产管理系统

项目编号&#xff1a; S 044 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S044&#xff0c;文末获取源码。} 项目编号&#xff1a;S044&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3…

【Proteus仿真】【STM32单片机】智能垃圾桶设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用报警模块、LCD1602液晶模块、按键模块、人体红外传感器、HCSR04超声波、有害气体传感器、SG90舵机等。 主要功能&#xff1a; 系统运行后&…

Spring基于xml注入bean的几种方式; Spring 框架中都用到了哪些设计模式;Spring的自动装配

文章目录 Spring基于xml注入bean的几种方式&#xff1a;Spring的自动装配&#xff1a;在Spring框架xml配置中共有5种自动装配&#xff1a;基于注解的方式&#xff1a; Spring 框架中都用到了哪些设计模式&#xff1f; Spring基于xml注入bean的几种方式&#xff1a; &#xff0…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于Fisher时段划分的配电网源网荷储多时间尺度协调优化调控策略》

这个标题涉及到电力系统领域的一些关键概念和方法。让我们逐步解读&#xff1a; 基于Fisher时段划分&#xff1a; "基于"表示这个策略或方法的核心基础是某个特定的理论或技术。"Fisher时段划分"可能指的是使用Fisher信息矩阵进行时间划分。Fisher信息矩阵…

居家适老化设计第三十条---卫生间之坐便

以上产品图片均来源于淘宝 侵权联系删除 在居家适老化中&#xff0c;马桶是非常重要的设施之一&#xff0c;它能够提供方便、安全、舒适的上厕所体验。以下是一些居家适老化中常见的马桶设计和功能&#xff1a;1. 高度合适&#xff1a;为了方便老年人坐起和站起&#xff0c;马…

Da-transunet:将空间和通道双重关注与Transformer u-net相结合用于医学图像分割

DA-TRANSUNET: INTEGRATING SPATIAL AND CHANNEL DUAL ATTENTION WITH TRANSFORMER U-NET FOR MEDICAL IMAGE SEGMENTATION 1、方法1.1 模型1.2 双注意力模块&#xff08;DA-Block&#xff09;1.2.1 PAM&#xff08; 位置注意力模块&#xff09;1.2.2 CAM&#xff08;通道注意力…

面试:Kubernetes相关问题

文章目录 Kubernetes的工作流程可以分为以下几个步骤&#xff1a;简述Kubernetes中的Deployment、StatefulSet、DaemonSet的区别在Kubernetes中&#xff0c;如何进行存储管理在Kubernetes中&#xff0c;如何实现滚动升级和回滚在Kubernetes中&#xff0c;如何进行日志和监控的管…

基于环形队列的生产者消费者模型线程池

目录 信号量 信号量是什么 信号量的操作 基于环形队列的生产者消费者模型 我们想怎么写这个模型 线程池 线程池的实现 线程的属性及方法 线程池的属性及方法 主线程 信号量 信号量也是通信的一种&#xff0c;前面在进程间通信的时候&#xff0c;我们说信号量到线程的…

NX二次开发UF_CURVE_ask_int_parms_sc 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_int_parms_sc Defined in: uf_curve.h int UF_CURVE_ask_int_parms_sc(tag_t int_curve_object, int * num_objects_set_1, tag_t * * object_set_1, int * num_object…

一文了解 StandardTokenizer 分词器,分词原理

一、StandardTokenizer简介 什么是StandardTokenizer&#xff1f; StandardTokenizer是HanLP中的一个分词器&#xff0c;也是默认的标准分词器。它基于词典和规则的方式对中文文本进行分词&#xff0c;将输入的句子切分成一个个独立的词语。 StandardTokenizer的主要特点如下…

Swing程序设计(6)边界布局,网格布局

文章目录 前言一、布局介绍 1.边界布局2.网格布局3.网格组布局.总结 前言 Swing程序中还有两种方式边界布局&#xff0c;网格布局供程序员使用。这两种布局方式更能体现出软件日常制作的排列布局格式。 一、布局介绍 1.BorderLayout边界布局 语法&#xff1a;new BorderLayout …

laravel8安装多应用多模块(笔记三)

先安装laravel8 Laravel 安装&#xff08;笔记一&#xff09;-CSDN博客 一、进入项目根目录安装 laravel-modules composer require nwidart/laravel-modules 二、 大于laravel5需配置provider&#xff0c;自动生成配置文件 php artisan vendor:publish --provider"Nwid…

windows cmd执行远程长脚本

背景 有时候我们想在未进行一些环境设置&#xff0c;或者工具使用者电脑中执行一段初始化脚本&#xff0c;为了简化使用者的理解成本&#xff0c;通常给使用者一段代码执行初始化电脑中的设置&#xff0c;尤其是这段初始化脚本比较长的时候。 脚本制作者 比如将需要执行的命…

【ARM CoreLink 系列 3.1 -- CCI-500 详细介绍 -上半部】

文章目录 1.1 CCI-500 介绍1.2 CCI-500 features 详细介绍1.2.1 Data Coherency between ACE Masters1.2.2 Quality of Service (QoS)1.2.3 (I/O) Coherency1.2.4 Crossbar Interconnect Functionality1.2.5 Performance Monitoring Unit (PMU)1.2.6 DVM Message Transport1.2.…

H5ke12--2--学生选课表格的编辑

方法1不可以修改的用label,如何按了哪一行 就会在下面有个文本显示可编辑的一行 方法2每一行后面都有一个编辑, 3对每一个修改,每一个td失去焦点都会有,直接到达我们服务器 注意 如果用span的每一个html元素都可以自己定义属性 Data-属性名,data-Address links也要给为span 1…

递归算法学习——二叉树的伪回文路径

1&#xff0c;题目 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例…

软件设计中如何画各类图之二深入解析数据流图(DFD):系统设计与分析的关键视觉工具

目录 1 前言2 数据流图&#xff08;DFD&#xff09;的重要性3 数据流图的符号说明4 清晰的数据流图步骤4.1 确定系统边界4.2 识别数据流4.3 定义处理过程4.4 确认数据存储4.5 建立数据流动的连线4.6 细化和优化 5 数据流图的用途6 使用场景7 实际应用场景举例8 结语 1 前言 当…

经典的回溯算法题leetcode子集问题思路代码详解

目录 子集问题 leetcode78题.子集 leetcode90题.子集II 如果各位对回溯不太了解可以看我昨天写的文章&#xff0c;以及上一篇着重整列了回溯经典的组合问题。 回溯算法详解-CSDN博客 经典的回溯算法题leetcode组合问题整理及思路代码详解-CSDN博客 子集问题 组合问题我们…