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

UVa 366 Cutting Up

题目描述拼布者经常需要将布料切割成1×11 \times 11×1的小正方形。他们有一种特殊工具旋转切割刀可以一次切割多层布料切割层数的上限由布料类型决定题目输入的第一个参数KKK。切割时无论切割长度是多少难度都是一样的因此问题的关键是最小化切割次数而不是切割长度。切割规则如下布料可以叠放且叠放的布料不需要形状完全相同。切割之间可以重新排列布料。布料不能被折叠。切割必须沿整数坐标进行即从边到边将一块布料切成两块。最终必须得到m×nm \times nm×n个1×11 \times 11×1的小正方形没有浪费。输入包含多行每行三个整数KKK最大可切割层数1≤K≤2001 \le K \le 2001≤K≤200、mmm高度1≤m≤201 \le m \le 201≤m≤20、nnn宽度1≤n≤201 \le n \le 201≤n≤20。输入以0 0 0结束。输出格式为m by n takes x cuts每组输出后跟一个空行。题目分析这是一道具有特殊性质的最优化问题。直觉上切割布料的过程可以看作一开始有一块m×nm \times nm×n的矩形每次操作可以选择若干块布料数量不超过KKK将它们叠放在一起然后沿某条直线切一刀使得每块被切中的布料都分成两块更小的矩形。最终目标是全部变成1×11 \times 11×1。由于m,n≤20m, n \le 20m,n≤20状态空间理论上有限但直接BFS\texttt{BFS}BFS或DP\texttt{DP}DP会遇到两个困难状态表示复杂多重集最多400400400种不同的矩形每种数量可达400400400。每次切割可以同时处理多种不同形状的矩形分支因子极大。然而题目允许不同形状叠放这一特性大大简化了问题我们不再需要为每种形状单独考虑切割而是可以一次性切割当前所有“还需要被切”的矩形中最需要切的那些。解题思路贪心策略的合理性核心贪心策略是每一轮从所有尚未变成1×11 \times 11×1的矩形中选择面积最大的min⁡(K,需要切的矩形总数)\min(K, \text{需要切的矩形总数})min(K,需要切的矩形总数)个矩形每个矩形都沿着较长边的一半向下取整切一刀其余矩形保留不动。重复直到全部是1×11 \times 11×1。为什么这样能得到最优解一刀切多块由于允许不同形状叠放一次切割可以同时作用于多个矩形因此我们希望在每一刀中尽可能多地切割“大块”的矩形因为大块矩形需要更多次切割才能变小。按面积排序面积越大的矩形距离1×11 \times 11×1的“距离”越远优先处理它们可以更快地减少总工作量。沿较长边中间切这是最平衡的切法可以最大化切完后两块的“最小面积”从而让两块都能在后续被继续切割避免出现细长条需要额外切割的情况。实际上对于矩形每次切成两半或尽可能接近一半是最优的切割策略。与BFS\texttt{BFS}BFS或DP\texttt{DP}DP的关系理论上本题可以用BFS\texttt{BFS}BFS精确求解但状态空间巨大每种矩形的数量范围000到400400400有400400400种矩形BFS\texttt{BFS}BFS会组合爆炸。而本题的数据范围m,n≤20m,n \le 20m,n≤20和允许不同形状叠放使得贪心策略恰好是全局最优的。这种贪心可以被视为一种基于优先级的贪心BFS\texttt{BFS}BFS每一步都选择当前最紧迫的任务进行切割。DP\texttt{DP}DP方法也不可行因为切割过程涉及并行处理多个矩形无法简单地用单矩形的DP\texttt{DP}DP叠加。算法步骤用vectorpairint, int存储当前所有矩形的尺寸(width, height)初始只有一块(n, m)。初始化切割次数cuts 0。循环直到所有矩形都是1×11 \times 11×1收集所有面积大于111的矩形到needToCut。按面积降序排序。取前take min(K, needToCut.size())个矩形。对这些矩形若宽度 ≥ 高度则水平切将宽度分成width/2和width - width/2否则垂直切。未选中的矩形直接保留。切割次数加111。输出结果。复杂度分析每轮切割需要处理的矩形个数最多为当前布料的总块数。初始为111块之后每切一刀会增加若干块。由于每次切掉最大的矩形且切法平衡矩形数量增长较慢。总切割次数不超过m×nm \times nm×n最坏情况每次只切一块实际远小于此。空间复杂度O(m×n)O(m \times n)O(m×n)。代码实现// Cutting Up// UVa ID: 366// Verdict: Accepted// Submission Date: 2026-05-16// UVa Run Time: 0.010s//// 版权所有C2026邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;intmain(){intl,h,w;while(cinlhw){if(l0h0w0)break;// 当前所有矩形的集合每个矩形用 (width, height) 表示vectorpairint,intpieces;pieces.push_back({w,h});intcuts0;while(true){// 收集所有需要切割面积 1的矩形vectorpairint,intneedToCut;for(autop:pieces)if(p.first*p.second1)needToCut.push_back(p);if(needToCut.empty())break;// 全部是 1x1结束// 按面积降序排序优先切大块sort(needToCut.begin(),needToCut.end(),[](pairint,inta,pairint,intb){returna.first*a.secondb.first*b.second;});vectorpairint,intnewPieces;inttakemin(l,(int)needToCut.size());// 本次最多切 l 个// 对选中的矩形每个都从较长边的一半处切一刀for(inti0;itake;i){autopneedToCut[i];if(p.firstp.second){// 宽度 高度水平切newPieces.push_back({p.first/2,p.second});newPieces.push_back({p.first-(p.first/2),p.second});}else{// 高度 宽度垂直切newPieces.push_back({p.first,p.second/2});newPieces.push_back({p.first,p.second-(p.second/2)});}}// 未选中的矩形原样保留for(intitake;i(int)needToCut.size();i)newPieces.push_back(needToCut[i]);piecesnewPieces;cuts;}couth by w takes cuts cuts\n\n;}return0;}总结本题的关键在于认识到允许不同形状叠放使得我们可以在一刀中同时切割多个矩形从而将问题转化为一个贪心过程每次优先切割当前面积最大的若干个矩形且采用最平衡的切法。这种贪心策略在该问题的约束下能够达到全局最优代码实现简洁高效。

相关文章:

UVa 366 Cutting Up

题目描述 拼布者经常需要将布料切割成 111 \times 111 的小正方形。他们有一种特殊工具(旋转切割刀),可以一次切割多层布料,切割层数的上限由布料类型决定(题目输入的第一个参数 KKK)。切割时,无…...

Godot游戏自动化构建与发布:基于GitHub Actions与Docker的CI/CD实践

1. 项目概述:当Godot遇上CI/CD如果你是一名独立游戏开发者,或者在一个小团队里负责Godot引擎的项目,那么“构建”和“部署”这两个词,大概率是你开发流程里最头疼的环节之一。手动导出项目到不同平台(Windows、Linux、…...

Python自动化Excel数据抓取:OpenClaw技能实战指南

1. 项目概述:从Excel表格到智能数据抓取如果你每天的工作都离不开Excel,并且经常需要从各种网页、文档甚至PDF里手动复制粘贴数据,然后费劲地整理到表格里,那你一定对“Excel大师”这个称号既向往又头疼。我们总希望Excel能更“聪…...

百度网盘直链解析终极指南:如何实现高速下载的完整技术方案

百度网盘直链解析终极指南:如何实现高速下载的完整技术方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在云存储服务普及的今天,百度网盘作为国内用…...

从零到联网:QNX Neutrino RTOS安装后的第一个网络配置实战(含ifconfig与DHCP详解)

从零到联网:QNX Neutrino RTOS安装后的第一个网络配置实战 当你第一次看到QNX Neutrino RTOS的Photon桌面时,那种兴奋感可能很快会被一个现实问题冲淡——这个看起来酷炫的系统怎么连上网?作为实时操作系统领域的标杆,QNX在车载系…...

别再只盯着CSI-2了!用示波器实测MIPI D-PHY波形,手把手教你排查Camera不通的硬件问题

别再只盯着CSI-2了!用示波器实测MIPI D-PHY波形,手把手教你排查Camera不通的硬件问题 调试Camera模块时,MIPI信号问题往往是硬件工程师最头疼的挑战之一。当系统出现图像异常、花屏或无法识别时,大多数工程师的第一反应是检查CSI-…...

Go语言AI编程助手SDK:提升Cursor代码理解与生成精准度

1. 项目概述:一个为AI编程而生的Go语言SDK如果你是一名Go语言开发者,同时又在深度使用Cursor这样的AI辅助编程工具,那么你很可能已经感受到了一个痛点:如何让AI更精准、更高效地理解你的代码库,并在此基础上进行智能操…...

猫抓插件:5分钟掌握浏览器资源嗅探的终极武器

猫抓插件:5分钟掌握浏览器资源嗅探的终极武器 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字内容无处不在的今天,你…...

从零构建团队技能仓库:结构化知识管理与VuePress实践

1. 项目概述:一个技能仓库的诞生与价值 最近在整理团队内部的技术资产时,我一直在思考一个问题:如何让那些散落在个人笔记、项目代码片段、会议纪要里的“隐性知识”和“最佳实践”沉淀下来,变成团队可复用、可传承的“显性资产”…...

Copaw_dev:AI编程助手增强框架,提升代码生成与自动化开发效率

1. 项目概述:Copaw_dev 是什么,以及它为何值得关注如果你是一名开发者,尤其是对自动化、代码生成或者AI辅助编程感兴趣,那么“Copaw_dev”这个项目标题很可能已经引起了你的注意。乍一看,这个由“G-Divine”维护的项目…...

Vircadia Native Core:开源虚拟世界服务器核心架构与部署实战

1. 项目概述:一个开源虚拟世界的“引擎心脏”如果你对构建一个属于自己的、去中心化的虚拟世界(Metaverse)感兴趣,或者你正在寻找一个能支撑起大规模、高自由度社交与协作应用的底层平台,那么Vircadia Native Core绝对…...

Scarab空洞骑士模组管理器:2024年最完整的安装与使用指南

Scarab空洞骑士模组管理器:2024年最完整的安装与使用指南 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 还在为空洞骑士模组安装的复杂流程而烦恼吗&#xff1f…...

开源项目容器镜像全流程实践:从命名规范到生产部署

1. 项目概述:从镜像名到开源协作生态的深度解构看到mco-org/mco这个镜像名,很多人的第一反应可能是去 Docker Hub 或 GitHub 上搜索,看看它具体是什么。但今天,我想从一个更本质、更实战的角度来聊聊这个话题。mco-org/mco不是一个…...

使用mcp-maker快速构建AI工具集成服务器:从MCP协议到实践

1. 项目概述:一个为AI应用注入“超能力”的MCP服务器工厂 如果你最近在折腾AI应用开发,特别是想给ChatGPT、Claude这类大模型配上“手和脚”,让它们能操作你的本地文件、查询数据库,甚至控制你的智能家居,那你大概率已…...

AI模型部署实战:基于FastAPI与Tauri构建OpenClaw模型GUI应用

1. 项目概述与核心价值最近在AI应用开发圈里,一个名为“GrahamMiranda-AI/openclaw-model-gui”的项目引起了我的注意。乍一看这个标题,它融合了“openclaw-model”和“gui”两个关键部分,这让我立刻联想到一个典型的场景:一个已经…...

基于AutoHotkey的Windows桌面自动化工具开发实战

1. 项目概述与核心价值最近在整理个人项目库时,翻到了一个挺有意思的“老伙计”——cua_desktop_operator_skill。这个项目名听起来有点拗口,直译过来是“CUA桌面操作员技能”。乍一看,可能会让人联想到某种工业控制台的专用软件。但实际上&a…...

从开源AI导师项目GURU-Ai拆解:如何构建具备教学能力的智能体

1. 项目概述:一个“AI导师”的诞生与定位最近在GitHub上看到一个挺有意思的项目,叫“Guru322/GURU-Ai”。光看名字,你可能会觉得这又是一个平平无奇的AI工具仓库。但点进去细看,你会发现它的野心不小——它想做的不是又一个聊天机…...

告别答辩PPT焦虑:百考通AI智能生成,高效搞定毕业答辩全流程

毕业季悄然来临,随着毕业论文定稿,答辩PPT成了不少同学面临的下一个挑战。不懂设计、不会梳理逻辑、找不到合适的学术模板……许多同学花费大量时间在排版调整、修改打磨上,不仅效率低下,还常常做出结构混乱、风格不统一的PPT&…...

可穿戴电子模块化连接方案:5mm微型按扣实现电路板与织物的可插拔连接

1. 项目概述与核心思路在折腾可穿戴电子项目时,最让人头疼的问题之一,就是如何让电路板与衣物既可靠连接,又能方便地拆下来。传统的做法要么是用导电胶带粘(不牢靠、易氧化),要么是直接把线焊死在板子上然后…...

【C语言】printf格式化输出:你真的理解“四舍五入”的陷阱吗?

1. 从printf的"四舍五入"陷阱说起 那天我在调试一个财务计算程序时,发现金额显示总差那么几分钱。比如3.145元应该显示为3.15,但程序输出却是3.14。这让我想起刚学C语言时踩过的坑——printf的格式化输出并不像数学课教的四舍五入那样简单。 先…...

AI驱动代码审查:Cursor与Git工作流融合实践

1. 项目概述:当AI代码助手遇上代码审查最近在GitHub上看到一个挺有意思的项目,叫guinacio/cursor-review。光看名字,你可能会觉得这又是一个普通的代码审查工具,但点进去仔细研究,你会发现它的核心思路非常巧妙&#x…...

CircuitPython状态灯、安全模式与文件系统故障排查实战指南

1. 项目概述与核心价值 如果你正在用CircuitPython做项目,无论是物联网传感器节点、智能穿戴设备还是互动艺术装置,大概率都遇到过这样的瞬间:板子上的RGB状态灯突然开始闪烁诡异的颜色,或者电脑上那个熟悉的 CIRCUITPY U盘图标…...

5分钟免费获取:开源鼠标连点器MouseClick完整使用指南

5分钟免费获取:开源鼠标连点器MouseClick完整使用指南 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,…...

开源办公套件自动化部署与集成实战:基于OpenOffice的服务化解决方案

1. 项目概述:为什么我们需要一个“开源”的办公套件?如果你在GitHub上搜索过办公软件相关的仓库,大概率会看到过longyangxi/OpenOffice这个项目。乍一看,你可能会以为这是一个Apache OpenOffice的镜像或者某个分支。但点进去仔细研…...

手机号归属地查询系统:3步构建可视化定位工具

手机号归属地查询系统:3步构建可视化定位工具 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirrors/lo/l…...

Kubernetes配置管理实战:基于Kustomize的结构化部署与多环境管理

1. 项目概述:一个被低估的Kubernetes配置管理利器如果你和我一样,长期在Kubernetes生态里摸爬滚打,那你一定经历过这样的场景:为了部署一个稍微复杂点的应用,需要维护一堆YAML文件——Deployment、Service、ConfigMap、…...

量子私有信息检索(QPIR)技术解析与应用前景

1. 量子私有信息检索技术概述量子私有信息检索(Quantum Private Information Retrieval, QPIR)是密码学领域的一项突破性技术,它允许用户从数据库中检索特定条目而不泄露被查询的是哪个条目。这项技术的核心价值在于解决了隐私保护与数据获取…...

JetBrains IDE试用期重置终极指南:3种简单方法实现30天无限续杯

JetBrains IDE试用期重置终极指南:3种简单方法实现30天无限续杯 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否在使用IntelliJ IDEA、PyCharm、WebStorm等JetBrains IDE时遇到过试用期突然结束…...

用51单片机和HC-SR04超声波模块DIY一个倒车雷达(附完整代码和立创EDA原理图)

51单片机与HC-SR04超声波模块实战:打造高精度倒车雷达系统 在汽车电子和智能硬件领域,倒车雷达作为基础安全装置,其DIY实现不仅能帮助理解超声波测距原理,更是掌握嵌入式系统开发的绝佳实践。本文将手把手教你使用经典的STC89C52单…...

STM8硬件IIC驱动BNO055传感器避坑指南(附完整代码)

STM8硬件IIC驱动BNO055传感器实战解析与优化 BNO055作为一款集成了9轴传感器融合算法的智能芯片,能够直接输出姿态角数据,极大简化了嵌入式系统中姿态解算的复杂度。然而在实际应用中,许多开发者发现使用STM32等常见MCU的模拟IIC接口难以稳定…...