题解:洛谷 P3650 [USACO1.3] 滑雪课程设计Ski Course Design
本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P3650 [USACO1.3] 滑雪课程设计Ski Course Design - 洛谷【题目描述】农民约翰的农场里有n座山峰每座山都有一个在 0 到 100 之间的整数的海拔高度。在冬天因为山上有丰富的积雪约翰经常开办滑雪训练营。不幸的是约翰刚刚得知税法在滑雪训练营方面有新变化明年开始实施。在仔细阅读法律后他发现如果滑雪训练营的最高和最低的山峰海拔高度差大于 17 就要收税。因此如果他改变山峰的高度使最高与最低的山峰海拔高度差不超过 17 约翰可以避免支付税收。如果改变一座山x单位的高度成本是x^2 单位约翰最少需要付多少钱才能使海拔最高的山峰与海拔最低的山峰的高度只差不超过 17 约翰只愿意改变整数单位的高度。【输入】输入的第一行是一个整数代表山峰的数量n。第 2 行到n1行每行一个整数。第i行的整数ai代表第i座山的海拔高度。【输出】输出一行一个整数代表约翰需要支付修改山海拔高度的总金额。【输入样例】5 20 4 1 24 21【输出样例】18【核心思想】问题分析给定n nn座山峰的海拔高度a i ∈ [ 0 , 100 ] a_i \in [0, 100]ai​∈[0,100]要求将所有山峰高度调整到某个区间[ L , L 17 ] [L, L17][L,L17]内L LL为整数使得调整总成本∑ x i 2 \sum x_i^2∑xi2​最小其中x i x_ixi​为每座山调整的高度。这是一个枚举 贪心问题关键在于确定最优区间下界L LL。算法选择排序预处理将山峰高度从小到大排序便于按区间处理枚举区间下界由于原始高度范围[ 0 , 100 ] [0, 100][0,100]最优区间[ L , L 17 ] [L, L17][L,L17]的L LL只需枚举[ 0 , 83 ] [0, 83][0,83]因L 17 ≤ 100 L17 \leq 100L17≤100贪心调整对每个L LL低于L LL的山峰提升到L LL高于L 17 L17L17的山峰降低到L 17 L17L17区间内的山峰不动关键步骤读入数据n nn和数组a [ 1.. n ] a[1..n]a[1..n]排序将a aa按升序排列枚举下界L LLL LL从0 00到83 8383初始化sum 0遍历每座山a j a_jaj​若a j L a_j Laj​Lsum (L - a_j)^2提升到L LL若a j L 17 a_j L 17aj​L17sum (a_j - L - 17)^2$降低到L 17 L17L17若在[ L , L 17 ] [L, L17][L,L17]内不调整成本为 0更新答案minn min(minn, sum)输出结果最小总成本m i n n minnminn时间/空间复杂度时间复杂度O ( 84 ⋅ n ) O ( n ) O(84 \cdot n) O(n)O(84⋅n)O(n)枚举 84 个下界每个遍历n nn座山空间复杂度O ( n ) O(n)O(n)存储山峰高度数组枚举区间的核心思想区间长度固定题目要求极差≤ 17 \leq 17≤17即区间长度固定为 17只需确定下界L LL最优调整策略对于固定区间[ L , L 17 ] [L, L17][L,L17]每座山独立决策——低于下限就提到下限高于上限就降到上限区间内不动。这是因为在区间约束下每座山的最优调整就是投影到区间最近端点枚举范围压缩原始高度∈ [ 0 , 100 ] \in [0, 100]∈[0,100]L LL的有效范围仅为[ 0 , 83 ] [0, 83][0,83]枚举量极小凸成本特性成本函数x 2 x^2x2是凸函数投影到区间的策略在独立约束下是最优的适用于带区间约束的最小化调整、固定窗口滑动、离散枚举优化等问题【解题思路】【算法标签】#普及- #贪心【代码详解】#includebits/stdc.husingnamespacestd;intn,a[1005],minn1e9;intmain(){cinn;// 输入nfor(inti1;in;i){// 输入所有山峰高度cina[i];}sort(a1,an1);// 按照从大到小排序for(inti0;i83;i){// 遍历山峰的最小高度最高高度就是i17intsum0;// 定义每轮总金额初始为0for(intj1;jn;j){// 遍历所有山峰if(a[j]i){// 小于最小高度就增加两者之差需要的成本sum(i-a[j])*(i-a[j]);}elseif(a[j]i17){// 高于最大高度也增加两者之差需要的成本sum(a[j]-i-17)*(a[j]-i-17);}}minnmin(minn,sum);// 每轮统计后计算最小值}coutminnendl;// 输出最小值return0;}【运行结果】5 20 4 1 24 21 18

相关新闻

为什么写 Prompt 时一定要加“你是 XX 专家”?

为什么写 Prompt 时一定要加“你是 XX 专家”?

别再当玄学了!为什么写 Prompt 时一定要加“你是 XX 专家”? 如果你接触过大语言模型(LLM),一定对这句话不陌生: “你是拥有 10 年经验的 XX 专家,请帮我……” 很多人觉得这不过是一句迎合 AI…

2026/8/3 13:18:49 阅读更多
蚁群算法在物流配送路径规划中的实践与优化

蚁群算法在物流配送路径规划中的实践与优化

1. 蚁群算法在配送路径规划中的核心价值 第一次接触蚁群算法是在2015年参与一个物流优化项目时。当时客户要求我们在3小时内完成200个配送点的路径规划,传统算法要么耗时过长,要么结果不理想。直到尝试了蚁群算法(Ant Colony Optimization, A…

2026/8/3 13:58:50 阅读更多
ODYSSEY平台实战FAQ:从环境配置到性能调优的避坑指南

ODYSSEY平台实战FAQ:从环境配置到性能调优的避坑指南

1. 项目概述:为什么需要一份“常见问题解答”?如果你正在使用或考虑使用ODYSSEY,那么这份“常见问题解答”就是为你准备的。无论是初次上手时的手足无措,还是在深度使用中遇到的“灵异”故障,我们都经历过。技术文档往…

2026/8/3 13:58:50 阅读更多
3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南

3分钟搞定!QQ空间历史说说完整备份终极指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想过,那些年发过的QQ空间说说,那些记录青春的文字…

2026/8/3 12:53:38 阅读更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是应用材料(Applied Materials)公司生产的一款用于半导体设备的I/O信号分配电路板。该型号(0100-02186)的核心特点如下:专用于Endura等半导体工艺腔室。集成信号路由与分配功能。连接控制…

2026/8/2 2:51:21 阅读更多
Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机

Nissei Corp FFMN-32L-10-T0 40AX 三相异步电动机是日本日清(Nissei)品牌的一款工业用三相异步电机,适用于自动化设备及通用机械驱动。该型号(FFMN-32L-10-T0 40AX)的核心特点如下:三相交流异步电动机。额定…

2026/8/2 2:52:49 阅读更多