/ Vijos / 题库 /

跳杆游戏

跳杆游戏

时间限制:1秒  内存限制:256M


【题目描述】

  小M最近迷上了一款游戏——跳杆游戏。这是一款智力游戏,游戏主要是操纵小精灵跳跃杆子,且要求采用技巧让精灵耗费的体力最少。

  该游戏的场景中有 \(N\) 根杆子,它们等距离地排成一排,并从左到右依次编号为 \(1..N\)。其中第 \(i\) 根杆子的高度为 \(h_i\) 米。一个被操纵的小精灵总是从一根杆子的顶端跳跃到相邻的另一根杆子顶端。每次跳跃都会耗费一定的体力,更准确地说,在高度分别为 \(x\) 米和 \(y\) 米的两根相邻杆子上跳跃,要耗费 \(C×|x-y|\) 个单位的体力,其中 \(C\) 是一个不超过 100 的正整数。当然,杆子不能移动,精灵只能按原有的顺序在相邻杆间跳跃。

  在这个游戏中,小M还可以操纵精灵去加高某些杆子,这样跳跃时能少付出些体力。但是加高杆子又也会耗费额外的体力,更准确地,如果把一根杆子加高 \(d\) 米的话,会耗费 \(d^2\) 个单位的体力。

  现在请你帮小M计算一下,如何合理操纵精灵,才能使精灵从 1 号杆跳跃到 \(N\) 号杆的过程中耗费的体力最少?

【输入格式】

  输入的第一行包含两个用空格隔开的整数:\(N\) 和 \(C\),它们的意义如题目描述。
  接下来的 \(N\) 行,每行一个整数,其中第 \(i+1\) 行的整数为 \(h_i\),表示第 \(i\) 根杆子的高度为 \(h_i\) 米。

【输出格式】

  输出精灵耗费的最少的体力。

【输入输出样例】

 Input

5 2
2
3
5
1
4

 Output

15

【输入输出样例解释】

  一共有5根杆子,在杆间跳跃耗费的体力值是高度差的2倍。杆子最初的高度依次为2,3,5,1,4米。如果让精灵能把第一根杆子加高1米,把第四根加高2米,使得它们的高度依次为3,3,5,3,4米,耗费体力为5。此时,从1号杆跳到5号杆耗费体力为2*(0+2+2+1) = 10,总耗费体力为15。

【数据限制】

  对于 \(60\%\) 的数据,\(1≤N≤5000\)。
  对于 \(100\%\) 的数据,\(1≤N≤100000\),\(1≤C≤100\),\(1≤h_i≤100\)。

【来源】

  Mr.he

信息

ID
2255
难度
9
分类
动态规划 | 数据结构 | 队列单调队列 点击显示
标签
(无)
递交数
2
已通过
1
通过率
50%
被复制
9
上传者