news 2026/5/6 1:17:27

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 1:07:36

[具身智能-582]:传统的机器人与具身智能的本质区别不仅仅在于是否通过自然语言与人类进行交互,更重要的是他自身对环境的适应性。

传统机器人与具身智能&#xff08;Embodied Intelligence&#xff09;的本质区别&#xff0c;核心确实在于“对环境的适应性”&#xff0c;而不仅仅是交互方式的升级。自然语言交互只是表象&#xff0c;真正的跃迁在于智能体能否在开放、动态、不确定的物理环境中自主感知、推理…

作者头像 李华
网站建设 2026/5/6 1:07:35

基于GitHub Actions与SVG构建动态个人技能图谱的完整实践指南

1. 项目概述&#xff1a;一个技能图谱的诞生最近在整理自己的技术栈和项目经验时&#xff0c;我一直在思考一个问题&#xff1a;如何能系统性地、可视化地展示一个开发者&#xff08;或者说任何一个专业人士&#xff09;的综合能力&#xff1f;简历太单薄&#xff0c;个人网站又…

作者头像 李华
网站建设 2026/5/6 1:07:34

Nintendo Switch游戏备份终极指南:nxdumptool完整使用教程

Nintendo Switch游戏备份终极指南&#xff1a;nxdumptool完整使用教程 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/5/6 1:04:30

新手友好组合:快马搭建Python待办事项项目,Cursor辅助理解每一行代码

最近在学Python&#xff0c;想找个能边练边学的项目。发现用InsCode(快马)平台生成基础代码&#xff0c;再用Cursor辅助理解特别适合新手。今天记录下这个命令行待办事项管理器的实现过程&#xff0c;对零基础特别友好。 项目功能设计 添加任务时需要输入描述和优先级&#xff…

作者头像 李华
网站建设 2026/5/6 1:02:30

Emacs配置文件的奥秘:Windows与Linux的差异

引言 Emacs,作为一个高度可定制的文本编辑器,提供了丰富的配置选项来满足用户的个性化需求。然而,用户在不同操作系统上配置Emacs时,可能会遇到一些细微但重要的差异,特别是在配置文件的使用和保存位置上。本文将详细讨论Emacs在Windows和Linux系统上如何处理配置文件,以…

作者头像 李华