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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem\mathrm{Problem}Problem

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

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

Solution\mathrm{Solution}Solution

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值