#L4275. 「KTSC 2022 R1」飞天松鼠
「KTSC 2022 R1」飞天松鼠
注意事项
在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:
- C++(标准为 C++ 17 及以上)
请在提交源代码前添加#include "squirrel.h"。
题目描述
题目译自 2022년도 국제정보올림피아드 대표학생 선발고사 - 1차 선발고사 T4「날다람쥐」
在二维平面上,有 根柱子按顺序排列。柱子从左到右编号为 到 。第 根柱子的底部位于点 ,高度为 。因此,这根柱子是连接点 和 的线段。此外,。
一开始,飞天松鼠位于最左边柱子的高度为 的位置,即点 。飞天松鼠需要依次经过所有柱子,最终到达最右边柱子的高度为 的位置,即点 。
当飞天松鼠从一根柱子飞到下一根柱子时,如果向右移动 ,高度会下降 。在到达下一根柱子之前,飞天松鼠不能碰到地面。到达下一根柱子的高度为 的位置是允许的。
飞天松鼠可以在一根柱子上向上爬或向下滑,但不能爬到超过柱子高度的位置。在第 根柱子上向上爬 需要花费 的费用。向下滑动不需要费用。
下图是飞天松鼠移动的一个例子。

下图左侧的移动方式由于中途碰到地面,因此不允许。下图右侧的移动方式由于没有经过所有柱子,也不允许。

请计算飞天松鼠以最小总费用到达目标位置的方法。
实现细节
你需要实现以下函数:
long long fly(vector<int> D, vector<int> H, vector<int> W, int L, int R);
- 该函数只会被调用一次。
- 给定的三个数组的大小为柱子的数量 。
- 给定的整数数组
D中,D[i]表示第 根柱子到第 根柱子的距离 。 - 给定的整数数组
H中,H[i]表示第 根柱子的高度 。 - 给定的整数数组
W中,W[i]表示第 根柱子上每上升 单位距离的费用 。 - 给定的整数 表示飞天松鼠在第 根柱子上的初始高度。
- 给定的整数 表示飞天松鼠在第 根柱子上需要到达的高度。
- 该函数的返回值应为:
- 如果有方法遵守规则到达最终位置,返回飞天松鼠到达最终位置的最小费用。可以证明,满足约束条件的输入数据的最小费用总是整数。
- 如果没有方法遵守规则到达最终位置,返回 。
注意,提交的代码中不应包含任何输入输出操作。
样例
考虑 ,第 根柱子到第 根柱子的距离为 ,第 根柱子到第 根柱子的距离为 ,柱子的高度从左到右分别为 ,柱子的权重从左到右分别为 , 的情况。
评测程序将调用如下函数:
fly([0, 2, 5], [8, 5, 5], [3, 4, 6], 5, 4) = 18
在这种情况下,从第 根柱子上升 个单位距离,然后在第 根柱子上升 个单位距离是最优的,因此函数应返回 。
这个例子满足子任务 的条件。
数据范围与提示
对于所有输入数据,满足:
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 1 | 4 | |
| 2 | 13 | |
| 3 | 18 | |
| 4 | 15 | ; |
| 5 | 18 | |
| 6 | 32 | 无附加限制 |
示例评测程序
示例评测程序按以下格式读取输入:
- 第 行:
- 第 行:
- 第 行:
示例评测程序按以下格式输出:
- 第 行:函数
fly返回的值
示例评测程序可能与实际评测程序不同。