有一个容量为$c$的水箱,初始是$c0$.
每时刻会掉$1ml$滴水。
有$n$个人,在$t_i$时刻来,最多带来$a_i$水,每毫升$b_i$元。
要让水箱可以坚持到$m$时刻。
求最小花费。
贪心。。。。
很妙。显然当要用到水的时候再用水,并且用价格最少的。
假设先把水都放进去,不管容量。每次发现要用水的时候,从里面取出最小的即可。
- 如果我取出来,导致之前本来可以过的过不去呢?放心每次过需要水的时候按时间计算了。
如果考虑容量,如果我装满了,并且发现我的水多余了,那我可以取代那些预准备费用大于他的水。
用1
map<int,int>q;
$q[x]$表示价格为$x$的水在准备区有多少。
一些小细节注意
- 初始化准备区的水,以及$q[0]$。
- 每次需要用水,准备区里的水需要减。
- 水溢出需要的细节
弹出准备区的水复杂度最多$O(n\log n)$
代码
1 |
|