题解

cookiebus 2023-09-21 12:31:42 11 返回题目

考虑当前点, 每次将当前点的糖果补满(最后走到号城市时剩余的糖果可以原价退掉),补满之前考虑之前剩余的糖果:

1:上一个点到达当前点需要消耗一些糖果, 消耗购买价格小的,总消费才能尽量小。

2:对于剩余的一些糖果,糖果在之前城市的购买价格高于当前点的购买价格,以原价售出(相当于不买)。

3:糖果在之前城市的购买价格低于当前点的购买价格,假设当前位置是,该糖果是在点购买的,那么这个糖果有中可能: (1). 该糖果在后面被消耗了。(2). 该糖果可以在之前的某个城市以一种更优的售出之后再到当前点购买等价交换之后使得购买价格更低。 (3). 该糖果最终到达号城市。

1,2点用单调队列存储(购买价格由低到高)之后就可以解决,3中(1)(3)都是不用考虑的,考虑(2):

设单调队列中的糖果购买价格最低的是在这个位置,剩下颗,在购买价格是,如果等价交换之后在后面的消耗中消耗价格更低,那么有,得到

假设,也就是在处取得最大值,而且有,那么这个糖果就在售出,再用当前点的糖果补上。

{{ vote && vote.total.up }}