题目传送门
大致思路
声明一个建筑结构体: {$time$ 表示抢修需要的时间 , $limit$表示截止时间}
按截止时间升序排序,确保当前处理的一定是"最紧急"的:
注: $curr$ 示当前花费了多少时间
搞一个最大堆,表示当前计划抢修的建筑中,花费时间最长的
如果$time+curr≤limit$,直接入堆
否则,如果 $time$ 小于堆顶的花费时间,那么进行替换
这是一定不会超过 $limit$ 的 ,为什么?
前面处理的截止时间肯定不会比 $limit$ 宽松,但是却花费时间更多,这样替换, $curr$ 肯定不会超过 $limit$
最终堆的大小就为答案
Code
1 | struct building { |
说些什么吧!