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

P1209 修理牛棚 Barn Repair 【洛谷算法习题】

P1209 修理牛棚 Barn Repair

网页链接

P1209 修理牛棚 Barn Repair

题目描述

在一个月黑风高的暴风雨夜,Farmer John 的牛棚的屋顶、门被吹飞了,好在许多牛正在度假,所以牛棚没有住满。

牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜。有些牛棚里有牛,有些没有。所有的牛棚有相同的宽度。

自门遗失以后,Farmer John 必须尽快在牛棚之前竖立起新的木板。他的新木材供应商将会供应他任何他想要的长度,但是吝啬的供应商只能提供有限数目的木板。Farmer John 想将他购买的木板总长度减到最少。

给出m , s , c m,s,cm,s,c,表示木板最大的数目、牛棚的总数、牛的总数;以及每头牛所在牛棚的编号,请算出拦住所有有牛的牛棚所需木板的最小总长度。

输入格式

一行三个整数m , s , c m,s,cm,s,c,意义如题目描述。
接下来c cc行,每行包含一个整数,表示牛所占的牛棚的编号。

输出格式

输出一行一个整数,表示所需木板的最小总长度。

输入输出样例 #1

输入 #1

4 50 18 3 4 6 8 14 15 16 17 21 25 26 27 30 31 40 41 42 43

输出 #1

25

说明/提示

【数据范围】
对于100 % 100\%100%的数据,1 ≤ m ≤ 50 , 1 ≤ c ≤ s ≤ 200 1\le m \le 50,1\le c \le s \le 2001m50,1cs200

USACO Training Section 1.3

解题思路

本题核心是贪心算法,求解用指定数量木板覆盖所有有牛牛棚的最小总长度。首先将有牛的牛棚编号升序排序,计算完整覆盖所有牛棚的基础总长度:最右侧牛棚 - 最左侧牛棚 + 1。若木板数量m大于等于牛的数量c,直接每头牛用一块木板,总长度为c。若木板不足,计算相邻牛棚之间的空隙长度,将空隙降序排序,优先在最大的 m-1 个空隙处分割木板,总长度减去这些最大空隙的和,即为最小总长度。该贪心策略能最大化节省木板长度,高效解决问题。

总结

核心逻辑:优先分割最大的空隙,用最少的木板长度覆盖所有有牛的牛棚。
关键操作:牛棚编号排序、计算相邻空隙、贪心选取最大空隙分割。
效率保障:排序+线性遍历,时间复杂度极低,完美适配题目数据范围。

代码内容

#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){intm,s,c;cin>>m>>s>>c;vector<int>stalls(c);for(inti=0;i<c;++i){cin>>stalls[i];}// 牛棚编号排序sort(stalls.begin(),stalls.end());// 如果木板数量不少于牛的数量,每头牛单独一块木板if(c<=m){cout<<c<<endl;return0;}// 计算相邻牛棚之间的空隙(空牛棚的数量)vector<int>gaps;for(inti=1;i<c;++i){gaps.push_back(stalls[i]-stalls[i-1]-1);}// 空隙从小到大排序sort(gaps.begin(),gaps.end());// 初始总长度为 c(每头牛单独一块木板)// 需要合并的次数为 c - m,每次合并增加对应空隙的长度inttotal=c;intneed_merge=c-m;for(inti=0;i<need_merge;++i){total+=gaps[i];}cout<<total<<endl;return0;}
http://www.jsqmd.com/news/760551/

相关文章:

  • Python音乐下载工具music-dl:多平台聚合搜索与自动化元数据处理
  • 别再测不准了!手把手教你用示波器20MHz带宽限制测电源纹波(附接地技巧)
  • 阿里云2026年OpenClaw/Hermes Agent安装指南,百炼token Plan配置详解
  • MPU9250数据老飘?从寄存器配置到滤波算法的避坑指南
  • RAG工程化实践:混合检索双剑合璧,打造高鲁棒性信息检索系统!
  • 深圳行,面试笔记!
  • Flappy框架:生产级LLM应用开发实战与架构解析
  • 基于NoneBot与LLM的智能聊天机器人插件部署与调优指南
  • 基于Vercel AI SDK与Next.js App Router构建企业级AI聊天机器人全栈方案
  • 如何用统一接口接入 Claude / Codex / OpenAI:一套更省事的方案
  • R 4.5中latticeExtra与spatstat 3.2耦合失效?3行代码修复+2个CRAN未收录的时空点模式诊断补丁
  • 告别向量池! Parkway AI用“文档树“重构信息检索,精准度飙升!
  • RevokeMsgPatcher终极指南:Windows平台聊天消息防撤回与多开解决方案
  • 从“重力势能”到“电势能”:一个高中物理老师没讲透的类比,帮你5分钟理解电势概念
  • 新手友好组合:快马搭建Python待办事项项目,Cursor辅助理解每一行代码
  • 基于人工势场 (APF) 与控制障碍函数 (CBF) 的避障路径规划算法研究(Matlab代码实现)
  • 终极Mac应用清理方案:Pearcleaner开源工具深度解析
  • 禹鼎工业无线遥控器天车卷扬机三防遥控电动葫芦YU-4起重机遥控器
  • 用Python和Librosa搞定语音情感识别:从RAVDESS数据集到MLP模型实战
  • 告别DMA困惑:手把手教你用AXI-Stream搞定摄像头数据流(附跨时钟域处理方案)
  • 如何判断是自己prompt写的不够好还是基座模型的能力不够达不到预期的效果,才需要做模型微调?
  • 月薪30K起!揭秘AI Agent工程师:AI时代最抢手的“新全栈”岗位!
  • 实战指南:基于快马平台快速开发全栈个人博客系统,释放vscode codex式生产力
  • League Akari:基于LCU API的英雄联盟客户端自动化工具技术架构深度解析
  • Docker Compose 如何实现容器间通信网络模式 network_mode 配置
  • 如何在 Docker Compose 中配置 Nginx 反向代理多个服务
  • 基于AI与爬虫的个性化投资日报生成器:从知乎大V观点到持仓分析
  • 2026年无动力游乐设备技术解析:塑料组合滑梯、大型游乐设备、室内游乐设备、攀爬网游乐设备、木质滑滑梯、游乐设备定制选择指南 - 优质品牌商家
  • TMS320F28xxx DSP开发踩坑记:手把手教你解决‘内存放不下’的#10099-D报错
  • 南京厂房漏水修缮实测:老牌服务商的现场交付全记录 - 奔跑123