hdu 4122 Alice’s mooncake shop(rmq)

2016年5月18日 0 作者 CrazyKK

hdu2142题目链接
题意:有n个订单和可以在m小时内制作月饼
接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼
接下来一行t,s表示制作的月饼可以保质t天,每保质一天需要花费s的价值
接下来m行表示从第0小时开始在该时间制作月饼的花费的价值
求完成所有订单消耗的最小价值

思路:一开始毫无头绪。。因为读错题了。。。之后发现做月饼只能在整点做,即使是提前,也只能提前整数个小时做。 然后发现冰箱的容量是没有限制的,所以每个订单单独考虑即可。

那么对于每一个订单,我们要找到订单当天以及之前T天,这T+1天中做月饼花费最少的那天做月饼。

但是如果对于每个订单,如果每次都更新相应的价值,找一次最小值,复杂度会炸。

这里我卡了一下。。。然后发现,可以只初始化一次。虽然在不同时间做月饼的花费会因为订单时间的不同而不同,但是每相邻的两个小时之间做月饼花费的差是固定的,也就是花费的相对大小是固定的。

因此对于每个订单,我在相应的区间内找到花费最小的时间的下标,然后恢复成实际的花费(因为花费是一个等差数列,很好恢复)

由于之后给的花费是开始后的第i小时。。。那么订单不妨也转化成小时的形式。。。

注意判断闰年。。

2A,开心。