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

题解:AcWing 4548 猴子和香蕉

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总


【题目来源】

AcWing:4548. 猴子和香蕉 - AcWing题库

【题目描述】

研究员正在测试猴子的智商。

他们将一串香蕉放到很高的地方,并给猴子一些积木。

如果猴子足够聪明,它应该能够通过将一个积木放到另一个积木上的方式,不断向上堆叠积木,建成一座高塔,并爬上去取得香蕉。

研究员一共给猴子提供了n nn种不同类型的积木,每种积木的供应数量无限多。

在堆叠过程中,猴子可以随意摆弄积木,自由决定积木的哪个面作为底面,以及积木的具体摆放朝向。

在堆叠时满足的条件是:位于下面的积木的长和宽必须严格大于位于上面的积木的长和宽。

堆叠的积木高度当然是越高越好,请你计算最大可能高度。

【输入】

输入包含多组测试数据。

每组数据第一行包含整数n nn

接下来n nn行,每行包含三个整数x i , y i , z i x_i,y_i,z_ixi,yi,zi,表示一种积木的长宽高。

当输入n = 0 n=0n=0时,输入结束。

【输出】

每组数据输出一行结果,格式为Case i: maximum height = x,其中i ii为组别编号(从1 11开始),x xx为最大可能高度。

【输入样例】

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

【输出样例】

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

【算法标签】

#线性DP-一维

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=100;// 定义最大节点数intn;// 方块种类数量structNode{intL,W,H;// 方块的长、宽、高}a[N];// 方块数组intf[N];// DP数组,f[i]表示以第i个方块为顶时的最大高度// 比较函数:首先按L从大到小排序,L相同则按W从大到小排序boolcmp(Node x,Node y){if(x.L!=y.L)returnx.L>y.L;returnx.W>y.W;}// 添加方块函数:将长宽高信息存入方块结构体voidadd(inti,intl,intw,inth){a[i].L=l;a[i].W=w;a[i].H=h;}intmain(){intt=1;// 测试用例编号while(cin>>n,n)// 读入n,当n不为0时循环{for(inti=0;i<n;i++)// 处理每种原始方块{intl,w,h;cin>>l>>w>>h;// 读入原始方块的长宽高// 将每种方块转换为3种不同的放置方式add(3*i+1,max(l,w),min(l,w),h);// 以l,w为底,h为高add(3*i+2,max(l,h),min(l,h),w);// 以l,h为底,w为高add(3*i+3,max(w,h),min(w,h),l);// 以w,h为底,l为高}// 将所有方块按L从大到小排序,L相同则按W从大到小排序sort(a+1,a+n*3+1,cmp);f[1]=a[1].H;// 初始化DP数组,第一个方块的高度intans=f[1];// 初始化答案for(inti=2;i<=3*n;i++)// 遍历所有方块{intmaxn=0;// 记录可放置在当前方块下方的最大高度for(intj=1;j<i;j++)// 检查所有之前的方块{// 如果方块j的长和宽都大于方块i的长和宽,则方块j可以放在方块i下方if(a[j].L>a[i].L&&a[j].W>a[i].W){maxn=max(maxn,f[j]);// 更新最大高度}}f[i]=maxn+a[i].H;// 当前方块的高度加上下方最大高度ans=max(ans,f[i]);// 更新全局最大高度}cout<<"Case "<<t<<": maximum height = "<<ans<<endl;// 输出结果t++;// 测试用例编号加1}return0;}

【运行结果】

1 10 20 30 Case 1: maximum height = 40 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 Case 3: maximum height = 28 5 31 41 59 26 53 58 97 93 23 84 62 64 33 83 27 Case 4: maximum height = 342 0
http://www.cnnetsun.cn/news/2558410.html

相关文章:

  • Unlock-Music:打破平台枷锁的音乐文件解密工具
  • 企业级Veo 2提示词治理框架(含合规校验/版本回溯/效果归因三模块)——仅限首批500名开发者开放》
  • 数据流降采样技术:Downstream库的核心原理与应用
  • 对比直接使用厂商API与通过Taotoken聚合调用的成本体感
  • 微信小程序AR与3D全景开发实战指南:揭秘Three.js在移动端的终极应用
  • Apple-Mobile-Drivers-Installer:Windows上iPhone USB网络共享驱动的终极解决方案
  • LLM Structured Output 生产工程:别再写正则解析JSON 了(工程师踩坑版)
  • FM5057H 二合一锂电池保护 IC
  • 智谱开启狂飙模式!7倍提速,全球最快,旗舰模型即问即答
  • WPF中Style和ControlTemplate的触发器有什么不同
  • 对比直接使用厂商api体验taotoken在路由容灾方面的优势
  • 低成本DIY智能驱猫系统:基于PIR传感器与雨刮水泵的硬件方案
  • 项目文档:基于51单片机的篮球计分器设计
  • 对比直接调用厂商API使用Taotoken聚合调用的延迟体感差异
  • Zotero检索引擎完全指南:如何快速提升文献检索效率
  • Selenium搞不定的文件上传弹窗?试试Playwright的`page.expect_file_chooser()`监听大法
  • 数据要素与大安全:运营商藏在信令里的印钞机
  • CPU-GPU协同加速LLM推理:APEX技术解析与实践
  • Win11鼠标指针太单调?这3个宝藏网站让你免费下载上千款酷炫指针方案
  • 别再傻傻插显示器了!手把手教你用BMC远程给服务器装系统(以浪潮服务器为例)
  • Avidemux视频编辑工具终极指南:5个简单步骤快速上手专业剪辑
  • 量子计算模拟器性能优化:从内存墙到指令级并行
  • Node.js驱动树莓派GPIO:从网页控制LED到舵机实战指南
  • Python之rgb2ansi包语法、参数和实际应用案例
  • 如何在浏览器中解锁加密音乐文件:Unlock-Music完全指南
  • 摆脱论文困扰!2026年最值得拥有的专业AI智能降重工具
  • 别再死记硬背了!用Python脚本模拟UDS $34/$36/$37诊断刷写,5分钟搞懂数据流
  • Godot4.2实战:用自定义Array2D类快速生成随机地图与关卡数据
  • QKeyMapper完整指南:Windows上最强大的免费按键映射解决方案
  • 规则归纳、聚类与异常检测:大数据分类核心技术实战解析