先将所有建筑位置排序。
使用贪心算法:
每次从最左边还没有被爆破的建筑开始,设它的位置为 left。
为了让当前这颗炸弹覆盖尽量多的右侧建筑,炸弹必须部署在某个建筑位置上,并且要能覆盖 left,所以炸弹部署点最远可以选到 left+M。
小明要为一条老旧街道实施整体爆破。这条街上的所有老建筑都标注在一张图纸上,每栋建筑对应一个位置。他手中有若干炸弹,每一枚炸弹必须安放在某栋建筑所在的位置。每枚炸弹拥有相同的影响范围 M:如果一栋建筑的位置到炸弹安放点的距离不超过 M,那么这栋建筑也会被该炸弹覆盖并爆破。为了控制预算,小明想知道,至少需要安放多少枚炸弹,才能使整条街上的每一栋建筑都至少被一枚炸弹覆盖。
形式化地,给定 N 栋建筑的位置以及一个整数 M。一枚炸弹可以安放在任意一个建筑位置 x 上,并覆盖所有满足 ∣p−x∣≤M 的建筑位置 p。求覆盖全部 N 栋建筑所需的最少炸弹数量。
约束条件:
N 满足 1≤N≤106。M 满足 0≤M≤109。当 M = 0 时,炸弹只能覆盖与其安放位置相同的建筑。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册