小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:通过了一场激烈的战斗,T部落消灭了全部z部落的入侵者。可是T部落的基地里已经有N个建筑设施受到了严重的损伤,若是不尽快修复的话,这些建筑设施将会彻底毁坏。如今的状况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,可是修复每一个建筑都须要必定的时间。同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑。若是某个建筑在一段时间以内没有彻底修理完毕,这个建筑就报废了。你的任务是帮小刚合理的制订一个修理顺序,以抢修尽量多的建筑。spa
N < 150,000; T1 < T2 < maxlongint排序
按照T1贪心显然不能够。游戏
按照T2贪心呢?若是咱们按照T2排序,能修就修,有什么问题呢?top
发现,若是一个T2比较小的,可是T1很大,会使得后面不少楼都修不了,不修这个楼反而更优。入侵
因此,咱们把全部的i以前的T1都放进堆里。时间
若是T1i<top则改修T1,不修top
证实:
若是一个楼不能修了,那么前i个只能修i-1个,因为咱们按照T2排序,因此前i个选择用时最少的i-1个,
就能给后面留更多的时间。