导弹防御塔

二分是怎么想到的?

我们假设已经找到了最终的方案,那么每一座防御塔都被分到了一些敌人去攻击

那么这个方案的时间是多少呢?就是每个防御塔的时间的最大值

每个防御塔的时间是他所分配的这些敌人里面所需要花费最长的时间去攻击的敌人的时间

相当于最大值最小,所以想到二分

蓝书上的做法固然正确,但是如果像我们上面这么想的话,显然建另一种图:

对每个防御塔,我们生成\(M\)个点,表示这座防御塔分配到的敌人,然后我们枚举每个防御塔和敌人,通过二分值算出这个敌人如果被这个防御塔攻击,那么他最晚是第几个被攻击,然后把这个敌人与对应的节点进行连线,最后算最大匹配即可

acwing上的打卡代码换了一种实现方法

update 2024.5.30

上面的做法是从怪兽的角度来考虑的,即考虑每个怪兽是由哪一座防御塔消灭的

而蓝书的做法就是从防御塔的角度考虑的,在二分的时间内,我们不管每座防御塔到底分配到了哪些怪兽,显然每座防御塔在规定时间内不停歇地发射炮弹是最优的,然后我们再去考虑这些炮弹的分配问题就好了

posted @ 2023-11-16 22:02  最爱丁珰  阅读(2)  评论(0编辑  收藏  举报