洛谷 P3650 [USACO1.3] 滑雪课程设计 Ski Course Design 题解
题意概述
给定一个长度为 \(n\) 的数列 \(\{a_i\}_{i=1}^n\),将 \(a_i\) 改为 \(b\) 所需的代价是 \((a_i-b)^2\)。求使得 \(\max\{a_i\}-\min\{a_i\}\le17\) 所需的最小代价。
解题思路
看到平方,我第一时间想到的就是三分。
如果不会三分法,右转 OI Wiki 学一学。
设要将数列的所有元素修改到 \([x,x+17]\) 区间内,问题转换为 \(x\) 在某个取值下总代价最小,求这个最小总代价。
于是有 \(x\in [\min\{a_i\},\max\{a_i\}-17]\),因为若 \([x,x+17]\) 的范围超出了数列的取值范围,则一定不会更优。
对于一个元素 \(a_i\) 所需的代价为:
\begin{cases}
(a_i - x)^2&(a_i<x),\\
0&(x\leq a_i\leq x + 17),\\
(a_i - x - 17)^2&(a_i>x + 17).
\end{cases}
\]
以 \(x\) 为自变量画出 \(cost_i\) 的图像,长这个样子:

很显然,这是一个单谷函数。
而总代价即为:
\]
单谷函数的和还是单谷函数,可以直接使用三分法求最小代价。时间复杂度 \(O(n\log n)\),32ms 跑得飞起。
Code
#include <iostream>
using namespace std;
const int N=1000;
const int INF=0x3f3f3f3f;
int a[N],n;
int f(int x) // 计算区间取[x,x+17]时总代价
{
int s=0;
for(int i=0;i<n;++i)
{
if(a[i]<x) s+=(x-a[i])*(x-a[i]);
else if(a[i]>x+17) s+=(a[i]-x-17)*(a[i]-x-17);
}
return s;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int l=INF,r=-INF,m1,m2;
cin>>n;
for(int i=0;i<n;++i)
{
cin>>a[i];
l=min(l,a[i]);
r=max(r,a[i]);
}
r-=17;
while(l<r) // 三分
{
m1=(l+r>>1),m2=m1+1;
if(f(m1)<f(m2)) r=m2-1;
else l=m1+1;
}
cout<<f(l);
return 0;
}
Update 2025.2.11:笔误,单峰函数 \(\to\) 单谷函数。
Update 2025.6.15:更换图片,更改图片与文字间距。
Update 2025.6.16:修改部分公式格式。
洛谷 P3650 [USACO1.3] 滑雪课程设计 Ski Course Design 题解的更多相关文章
- 洛谷 P3650 [USACO1.3]滑雪课程设计Ski Course Design
P3650 [USACO1.3]滑雪课程设计Ski Course Design 题目描述 农民约翰的农场里有N座山峰(1<=N<=1000),每座山都有一个在0到100之间的整数的海拔高度 ...
- USACO 1.3.6 Ski Course Design[滑雪课程设计]
先说说思路: 这题比上一道坑人的wormholes简单多了!我一看到这题,“XXX设计”,还以为要用到什么dp呢,没想到是水题 用两层循环,第一层循环相差17中的上界,第二层遍历所有的山峰计算答案.并 ...
- 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 使用四种算法
洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 水题一道…… 题目描述 农民约翰的母牛总是产生最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. ...
- 【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解
[洛谷P2584][ZJOI2006]GameZ游戏排名系统题解 题目链接 题意: GameZ为他们最新推出的游戏开通了一个网站.世界各地的玩家都可以将自己的游戏得分上传到网站上.这样就可以看到自己在 ...
- 洛谷P1214 [USACO1.4]等差数列 Arithmetic Progressions
P1214 [USACO1.4]等差数列 Arithmetic Progressions• o 156通过o 463提交• 题目提供者该用户不存在• 标签USACO• 难度普及+/提高 提交 讨论 题 ...
- 洛谷4525 & 4526:【模板】自适应辛普森法——题解
参考:https://phqghume.github.io/2018/05/19/%E8%87%AA%E9%80%82%E5%BA%94%E8%BE%9B%E6%99%AE%E6%A3%AE%E6%B ...
- 洛谷1387 二维dp 不是特别简略的题解 智商题
洛谷1387 dp题目,刚开始写的时候使用了前缀和加搜索,复杂度大概在O(n ^ 3)级别,感觉这么写还是比较对得起普及/提高-的难度的..后来看了题解区各位大神的题解,开始一脸mb,之后备受启发. ...
- 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 超时怎么办? ...
- 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 217通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 ...
- 洛谷P1211 [USACO1.3]牛式 Prime Cryptarithm
P1211 [USACO1.3]牛式 Prime Cryptarithm 187通过 234提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 题面错误 题目描述 ...
随机推荐
- Visual Studio 17.3
Visual Studio 2022 17.3新UI
- elasticsearch RestHighLevelClient 关于document的常用操作 ---------- 新增篇
es中的新增操作分类两大类:普通新增和批量新增 普通新增使用IndexRequest即可 批量新增使用BulkRequest通过循环的方式将数据进行统一装载最后执行bulk操作 普通新增: //es单 ...
- 【目录】【中文】【deplearning.ai】【吴恩达课后作业目录】
[目录][吴恩达课后作业目录] 吴恩达深度学习相关资源下载地址(蓝奏云) 课程 周数 名称 类型 语言 地址 课程1 - 神经网络和深度学习 第1周 深度学习简介 测验 中英 传送门 无编程作业 编程 ...
- HTML显示不出来图片原因及解决办法
HTML插入图片时,一直显示不出来图片,大体分为两种情况. 一.写了代码,也有图片的空间,但就是没有图片. 二.有图片位置,也有图片框框,但图片就是不显示. 针对图一,应该是路径问题,尽量不要有汉字, ...
- 微软 AI Agent三剑客:AutoGen、Semantic Kernel与MEAI的协同演进
引言 微软正在积极构建其人工智能(AI)开发者生态系统,旨在为开发者提供从实验研究到生产部署的全方位支持.在这一宏大蓝图中,AutoGen.Semantic Kernel (SK) 和 Microso ...
- k8s servicemonitor 采集超时配置
背景说明 我们有时候在编写exporter时,其中某个采集的metrics接口获取数据很慢,可能需要达到10-20S,基于此种情况,如果我们按照ServiceMonitor默认的配置进行,这里默认sc ...
- Python 潮流周刊#106:PEP-734 正式接纳,多解释器时代来临(摘要)
本周刊由 Python猫 出品,精心筛选国内外的 400+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...
- 彻底禁用Windows更新与安全中心【小白友好】
首先我们需要临时关闭安全中心 1.选择开始图标,点击"设置". 2.找到隐私和安全性后,进入"Windows安全中心" 3.点击开启Windows安全中心. 4 ...
- apche服务器下无后缀文件配置浏览器访问自动下载
1.在配置最新的IOS app 微信授权登录时 SDK时,碰到一个问题.服务器端需要配置IOS唤起微信APP授权的通用链接地址. 2.关于通用链接 3. 必须将ios的配置文件放入网址根目录下的app ...
- VS2019 添加时没有区域(Areas) 通用-MVC 下也没有域
https://www.cnblogs.com/shijiehaiyang/p/13035250.html VS2019 似乎和之前版本不同,想要直接添加区域时,发现没有这一个选择1.按网上所提供意见 ...