『毒瘤算法系列7』魔棒(二分答案·差分约束)

本文讨论了一个英雄使用魔杖抵挡伤害的问题。英雄每秒受到伤害,魔杖积攒能量并在满足施法间隔cd后恢复生命。通过二分搜索确定最大的cd值,使得英雄能在生命值不降为0的情况下存活。利用差分约束建立模型,确保在特定时间内至少释放一次魔棒能量。
摘要由CSDN通过智能技术生成

P r o b l e m \mathrm{Problem} Problem

有一个英雄,初始生命值是 h p hp hp(生命值无上限),在接下来的 n n n秒内,每秒会受到一次伤害,第i秒受到的伤害值为 a [ i ] a[i] a[i]。这个英雄有一个道具“魔杖”,魔杖的初始能量为 0 0 0,每受到一次伤害,积攒一点能量。在英雄受到伤害后,可以立即释放魔棒中的能量,恢复 15 × 15× 15×[能量点数]的生命值,且魔棒的点数清零。释放能量有施法间隔 c d cd cd c d cd cd是正整数),即相邻的两次释放的时间间隔至少有 c d cd cd秒。任何时刻当 h p ≤ 0 hp≤0 hp0时视为死亡,问这个英雄存活下来的前提下, c d cd cd的值最大可以是多少?

注意,若 a [ i ] a[i] a[i]为负,受到“伤害”后实际上生命值是增加的,魔棒仍然积攒能量。

S o l u t i o n \mathrm{Solution} Solution

显然我们可以想到二分 c d cd cd,关键是我们如何判断二分值 x x x的合法性。

我们如果要用差分约束来的不等式来限制的话,我们设 d i d_i di表示前i次的恢复次数。

  • 显然 d i − d i − 1 ≥ 0 d_i-d_{i-1} \ge 0 didi10
  • 对于我们二分的数值 x x x有:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值