[HDU 1069 Monkey and Banana]DP

python电子学会三级的零碎笔记 ‌示例‌:如果s = ['a', 'b', 'c'],则' '.join(s)+'\n'的结果是'a b c\n',写入文件时所有元素会在一行内显示,每个元素之间用空格分隔,末尾有一个换行符。(2) '\n'.join(s)‌:如果s = ['a', 'b', 'c'],则'\n'.join(s)的结果是'a\nb\nc',写入文件时每个元素会占据文件的一行。(1) ' '.join(s)+'\n'‌:这种方式首先将列表s中的每个元素通过空格连接成一个字符串,然后在字符串末尾添加一个换行符\n。 阅读详情

题目链接  http://acm.hdu.edu.cn/showproblem.php?pid=1069

Monkey and Banana

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9902    Accepted Submission(s): 5152


Problem Description
A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monkey is clever enough, it shall be able to reach the banana by placing one block on the top another to build a tower and climb up to get its favorite food.

The researchers have n types of blocks, and an unlimited supply of blocks of each type. Each type-i block was a rectangular solid with linear dimensions (xi, yi, zi). A block could be reoriented so that any two of its three dimensions determined the dimensions of the base and the other dimension was the height.

They want to make sure that the tallest tower possible by stacking blocks can reach the roof. The problem is that, in building a tower, one block could only be placed on top of another block as long as the two base dimensions of the upper block were both strictly smaller than the corresponding base dimensions of the lower block because there has to be some space for the monkey to step on. This meant, for example, that blocks oriented to have equal-sized bases couldn't be stacked.

Your job is to write a program that determines the height of the tallest tower the monkey can build with a given set of blocks.
 

Input
The input file will contain one or more test cases. The first line of each test case contains an integer n,
representing the number of different blocks in the following data set. The maximum value for n is 30.
Each of the next n lines contains three integers representing the values xi, yi and zi.
Input is terminated by a value of zero (0) for n.
 

Output
For each test case, print one line containing the case number (they are numbered sequentially starting from 1) and the height of the tallest possible tower in the format "Case case: maximum height = height".
 

Sample Input
  
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
 

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

Source
 
其实蛮简单的,思考一下就可以了。
题目意思是给你n个长方体的长宽高,长方体能用各种姿态摆,也就是长能做宽宽能做高高能做长,随意变化。。。
每一种长方体的个数无限,稍微想想就知道一个长方体能摆3个姿势,长宽高能定6种。
然后让你把这些长方体像金字塔一样堆叠起来,上面的长方体要小于下面的长方体,宽和长都要小于下面长方体的宽和长,让你求出能摆出的最高高度。
其实就是最大子序列和,写出转移方程的条件就行。
我的做法是,每给你一个长方体的数据,就存6种长方体,然后按照长或者宽从小到大排序,用dp记录用当前长方体做低能堆叠出的最高高度。

代码如下
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct node   //开个结构体数组,用来记录dp值和长宽高
{
    int x, y, z;
    int dp;
};
int cmp(node a, node b)
{
    return a.x < b.x;
}
node nod[185];
int n;
int main()
{
//    freopen("input.txt", "r", stdin);
    int s[3];
    int a, b, c;
    int cnt;
    int tt = 1;
    while (scanf("%d", &n) != EOF&&n)
    {
        cnt = 1;
        for (int i = 1; i <= n; i++)
        {
            scanf("%d%d%d", &s[0], &s[1], &s[2]);
            sort(s, s + 3);
            nod[cnt].x = s[0];    //冗长的储存。。。
            nod[cnt].y = s[1];
            nod[cnt].z = s[2];
            nod[cnt++].dp = s[2];
            nod[cnt].x = s[1];
            nod[cnt].y = s[0];
            nod[cnt].z = s[2];
            nod[cnt++].dp = s[2];
            nod[cnt].x = s[1];
            nod[cnt].y = s[2];
            nod[cnt].z = s[0];
            nod[cnt++].dp = s[0];
            nod[cnt].x = s[2];
            nod[cnt].y = s[1];
            nod[cnt].z = s[0];
            nod[cnt++].dp = s[0];
            nod[cnt].x = s[2];
            nod[cnt].y = s[0];
            nod[cnt].z = s[1];
            nod[cnt++].dp = s[1];
            nod[cnt].x = s[0];
            nod[cnt].y = s[2];
            nod[cnt].z = s[1];
            nod[cnt++].dp = s[1];
        }
        sort(nod, nod + cnt, cmp);  //按照宽或者长从小到大排序
        for (int i = 1; i < cnt; i++)
        {
            for (int j = 1; j < i; j++)
            {
                if (nod[i].x > nod[j].x && nod[i].y > nod[j].y)  //长/宽都要大于上面的长方体的长/宽
                    nod[i].dp = max(nod[i].dp, nod[j].dp + nod[i].z);
            }
        }
        int mx = -1;
        for (int i = 1; i < cnt; i++)   //取最大值
            mx = max(mx, nod[i].dp);
        printf("Case %d: maximum height = %d\n", tt++, mx);
    }
    return 0;
}



(四) OpenClaw-Skill技能全面了解和自定义技能 OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。 阅读详情

相关推荐

Verilog除法器(32位无符号+带符号)

32位无符号除法器设计 恢复余数法: 恢复余数除法的基本思路是从“部分余数”中减去除数,如果结果为负(不够减),则恢复原来的部分余数,商0. 寄存器使用: reg_r 存放被除数a reg_b 存放除数b reg_r 存放余数(初始清零) 具体做法: 做减法时,减数是reg_b中的除数,被减数是reg_r中的余数左移一位,最低位由reg_q(被除数)的最高位补充。为了能够判断相减结果的正...

qq_38600065的博客 1万+

HDU1069-Monkey and Banana 【DP】

题目地址:https://cn.vjudge.net/problem/HDU-1069 看了一下这个DP教程,受到启发来做这题,一开始solve函数是这么写的 int solve() { getpre(); memset(dp,0,sizeof(dp)); dp[0][0] = 0; dp[0][1] = bl[0].c; for(int i=1;i&...

好好学习天天向上 3298

STM32实战:手把手教你移植CanFestival协议栈(附完整代码)

本文提供了一份详尽的STM32平台移植CanFestival协议栈的实战指南。文章从工程搭建、定时器驱动、CAN硬件适配到对象字典配置,手把手讲解核心步骤,并附完整代码示例。重点剖析了时间管理、报文收发等关键环节的实现与常见问题解决方案,旨在帮助开发者深入理解并成功实现CANopen通信。

kiwi8的博客 274

HDU1069 Monkey and Banana (DP)

HDU1069 Monkey and Banana (DP) HDU1069 Monkey and Banana DP 题意 思路 AC代码 原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意 有n个小块,每个块能摆成6种方案,每个小块提供无数个,下一层的长宽都必须严格大于上一层的长与宽。问最高能够叠多高。 ...

HuiSeKongHuan的博客 390

为什么你的SSE连接总断?深入对比EventSource与fetch-event-source的5大差异点

本文深入对比了原生EventSource与@microsoft/fetch-event-source库在SSE连接稳定性上的五大关键差异。重点剖析了后者在请求能力、连接控制、错误处理、数据解析及性能优化方面的优势,特别是其支持POST请求、自定义Header、精细化的重连策略与生命周期管理,为解决生产环境中SSE连接频繁断开的问题提供了专业方案。

weixin_28077113的博客 494

2024年下半年软考系统架构设计师案例分析题

摘要: 本文包含两个软件系统设计案例。案例一讨论了大语言模型智能系统的质量属性需求分析,识别了功能性、性能、可靠性等需求,并对比了ping/echo和心跳两种故障检测策略。案例二探讨了购物网站的缓存设计,包括Cache-Aside策略的数据读取/更新流程,以及解决缓存一致性的多种方案(消息队列、数据库插件、锁机制等)。此外还涉及Elasticsearch分词器的特点比较和RESTful架构实现前后端分离的原理。这些案例展示了软件架构设计中的质量属性权衡、缓存策略选择及系统解耦等关键技术考量。<|end

卿着飞翔 1047

HDU 1069 Monkey and Banana dp 题解

HDU 1069 Monkey and Banana 题解 纵有疾风起 题目大意 一堆科学家研究猩猩的智商,给他M种长方体,每种N个。然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉。 现在给你M种长方体,计算,最高能堆多高。要求位于上面的长方体的长要大于(注意不是大于等于)下面长方体的长,上面长方体的宽大于下面长方体的宽。 输入输出 开始一个数n,表示有多少种木块,木块...

weixin_30433075的博客 174

华为od 面试八股文_C语言_02_含答案

华为od 面试八股文_C语言_02_含答案

MISAYAONE的博客 2230

hdu 1069 Monkey and Banana DP

传送门:hdu 1069 Monkey and Banana题目大意一堆科学家研究猩猩的智商,给他M种长方体,每种N个。然后,将一个香蕉挂在屋顶,让猩猩通过 叠长方体来够到香蕉。现在给你M种长方体,计算,最高能堆多高。要求位于上面的长方体的长要小于(注意不是小于于等于)下面长方体的长,上面长方体的宽小于下面长方体的宽。解题思路每一种长宽高不同的箱子来说,最多有六种摆放方式, 把这六种摆放的样式全部

woshinannan的专栏 435

深度学习助力台风路径预测:技术剖析与实战应用全攻略(基于LSTM模型)

摘要:深度学习技术在台风路径预测领域展现出巨大潜力。通过融合多源气象数据,深度学习模型如LSTM能有效处理时间序列数据,捕捉台风路径变化规律。与传统方法相比,深度学习模型在自动特征学习和处理复杂模式方面具有独特优势,提高了预测的准确性和实时性。然而,挑战依然存在,包括数据质量问题、模型可解释性不足以及极端台风的复杂性。未来,随着观测技术的进步和新算法的开发,深度学习将在台风路径预测中发挥更大作用,为防灾减灾提供更精准的决策支持。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2228

经典的YOLOv3和YOLOV5算法详解及代码复现

yolov3和yolov5算法详解及代码复现

hasakie的博客 771

C - Monkey and Banana HDU - 1069——基础dp

Think: 1知识点:基础dp 2题意:询问n种箱子在满足 1>可以不同面为底 2>一个叠一个 3>叠的箱子中上面的箱子长和宽都严格小于下面的箱子的长和宽 4>无限个箱子 条件下能够叠的最高高度vjudge题目链接以下为Accepted代码——基础dp#include <cstdio> #include <cstring> #include <algorithm>using name

BlessingXRY的博客 505

【AI Agent 记忆共享实战】【下篇】多 Agent 会话 Session 统一共享实战:全链路工程落地、采集归一、MCP 服务、私有化部署、源码级实战

中篇我们已经锁定最终最优架构方案: 非侵入式、外部旁路采集、只读归一、中心化存储、MCP 按需检索注入。摒弃「改 Agent 源码」「软链接互通」「原生 Session 互导」等不现实方案。本篇直接落地可上线、可简历复用、可个人私有化部署多 Agent 异构 Session专属采集器(Claude/CODex/DSH/OpenCode/Kimi/WorkBuddy/ 豆包)统一消息归一化解析层(解决所有 Schema 异构)增量同步、去重、时间戳对齐核心逻辑。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 483

ACM-经典DP之Monkey and Banana——hdu1069

  ***************************************转载请注明出处:http://blog.youkuaiyun.com/lttree*************************************** Monkey and Banana   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 6553...

继续激情,继续奋斗。 7751

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU1069 Monkey and Banana —— DP

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1069 Monkey and Banana Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16589A...

alince20008的博客 161

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Linux文件系统详解:从基础概念到高级挂载技巧

文件系统是操作系统管理存储设备的核心机制,Linux采用独特的单一目录树结构组织存储资源。从底层原理看,文件系统通过超级块、inode表和目录项等组件实现数据的高效存取。ext4、XFS等主流文件系统类型各有特点,工程师需要根据性能需求、功能特性和兼容性要求进行选择。在实际应用中,通过mount命令和fstab配置可以实现灵活的挂载管理,而bind mount、tmpfs等高级技巧则能满足容器化、内存文件系统等特殊场景需求。文件系统性能优化涉及挂载选项调整、日志模式选择等多个维度,合理的配置可以显著提升数据

aofan9566的博客 321

[HDU 1069 DP]Monkey and Banana

方法1: dp[i][j]记为在第i层使用第j块block的最大高度。三重for循环: #include<bits/stdc++.h> #define pb push_back using namespace std; const int N = 95; int n; typedef long long ll; struct block{ int x,y,h; block(int _x,int _y,int _h):x(_x),y(_y),h(_h){ } }; vector<b

我们仍未知道那天所看见的花的名字。 124

HDU 1069 Monkey and Banana DP

Monkey and Banana Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u SubmitStatusDescription A group of researchers are designing an experiment to test the IQ of a mo

Katapeltes 597

HDU1069 Monkey and Banana DP

题意:给你一些不同的方块,每种方块可以用无限个,当上一方块的底面长宽都小于下一方块的底面时两方块可以叠在一起,求这些方块叠起来的最高高度 思路:由于方块可以翻转,故底面有六种情况,每种方块把六种情况都做考虑,取dp[i]为第i个方块为底的时最大高度,则dp[i]=block[i].z+max(dp[j]),0<j<i,即当前最大高度等于当前方块高度加上可以放在i上面的最大高度,求出每个...

qq_42397248的博客 189

HDU 1069 Monkey and Banana (DP)

DP

yohanlong的专栏 309

hdu 1069 Monkey and Banana dp

题意:给你n种个长方体,告诉你每种长方体的长,宽,高,并且每种长方体个数不限 问:把它们堆起来的最大高度 限制条件:上面一个长方体a的底面积,必须比它下面一个长方体b的底面积大,而且,a的底面的长宽也要大于b的底面的长宽 所以,b的底面积如果比a的底面积小,b也不一定能放在a上面 View Code #include <iostream>#include &l...

diaopi1575的博客 177

HDU 1069 Monkey and Banana(dp)

题目链接:HDU 1069 Monkey and Banana dp。 我认为这道题难点在于解决方块无限个的问题,转化到代码中就是一个方块变成六个方块。然后排序,剩下就简单了。 blocks[i].height表示第i个块在最底下时候的最大高度。 具体看代码吧。 #include #include #include using namespace std; const in

fobdddf的专栏 576

HDU 1069 Monkey and Banana【DP】

Problem Description A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey wit...

dianxuanzhi1019的博客 133

hdu1069 Monkey and Banana dp

题目链接:http://hdu.hustoj.com/showproblem.php?pid=1069                                                                                                                    Monkey and Banana Ti

一七得七 406

HDU 1069 Monkey and Banana Dp问题

题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/C 题意:给定一些长方体的尺寸,数量都是无限个,然后求这写长方体能堆切成的最大高度。PS:接触面的上面必须严格小于下面的面。 这题和紫书P269的巴比伦塔例题差不多,可以说是一模一样,紫书上把这种题型叫DAG上最长路。看了别人的代码AC的。 思路:

catch_catch的专栏 651

HDU1069 Monkey and Banana【基础DP】

Monkey and Banana 题意: 有n种类型的砖块,每种类型的砖块都有无限个。第i块砖块的长宽高分别用xi,yi,zi来表示。 同时,由于砖块是可以旋转的,每个砖块的3条边可以组成6种不同的长宽高。在构建塔时,当且仅当A砖块的长和宽都分别小于B砖块的长和宽时,A砖块才能放到B砖块的上面,计算最高可以堆出的砖块们的高度。 题解: 因为一块砖有六个形态,直接将每个形态确定为一种砖块,然后排好序(随便以什么依据,但一定要排好序)。要明确一点,是不能用贪心做的,因为也许在A砖上放置了B,不...

lllllan 166
上一篇: [HDU 2571 命运]简单DP
下一篇: [HDU 1171 Big Event in HDU]背包
chenningGo
博客等级 码龄11年 1粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值