[JSOI2007]建筑抢修——贪心反悔堆

题目描述

小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏。现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间。同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑。如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了。你的任务是帮小刚合理的制订一个修理顺序,以抢修尽可能多的建筑。

N < 150,000; T1 < T2 < maxlongint

题解:

按照T1贪心显然不可以。

按照T2贪心呢?如果我们按照T2排序,能修就修,有什么问题呢?

发现,如果一个T2比较小的,但是T1很大,会使得后面很多楼都修不了,不修这个楼反而更优。

所以,我们把所有的i之前的T1都放进堆里。

如果T1i<top则改修T1,不修top

证明:

如果一个楼不能修了,那么前i个只能修i-1个,由于我们按照T2排序,所以前i个选择用时最少的i-1个,

就能给后面留更多的时间。

原文地址:https://www.cnblogs.com/Miracevin/p/9799024.html