DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

有的坦克进入攻城模式,有的还在砰砰砰砰砰砰!

返回题目

题解

消除浪费伤害的攻城攻击

以端点为目标的攻城攻击最多使生命值总和减少 333;当 N=1N=1N=1 时,最多减少 222。坦克模式攻击能以不超过 333 的费用产生相同的变化。因此,存在一个不对端点使用攻城模式的最优方案。

一次攻城模式攻击最多使生命值总和减少 444。如果因为生命值在 000 处截断而浪费了任何伤害,实际减少的生命值总和就至多为 333。用坦克模式攻击产生完全相同的生命值变化,费用不超过 333,且能到达相同状态。因此,存在一个最优方案,使每次攻城攻击的伤害都被完整利用。

最大化攻城攻击次数

设对位置 iii 使用攻城模式的次数为 xix_ixi​。根据上述结论,去掉对端点的攻城攻击,令 x0=x1=xN=xN+1=0x_0=x_1=x_N=x_{N+1}=0x0​=。每个位置都必须满足

xi−1+2xi+xi+1≤ai.x_{i-1}+2x_i+x_{i+1}\le a_i.xi−1​+2xi​+x

反过来,只要这些条件成立,就可以按任意顺序进行攻城攻击而不浪费伤害,再用坦克模式消除剩余生命值。设 K=∑ixiK=\sum_i x_iK=∑i​xi​,攻城攻击使生命值总和减少 4K4K4K,因此总费用为

3K+∑i=1Nai−4K=∑i=1Nai−K.3K+\sum_{i=1}^{N}a_i-4K=\sum_{i=1}^{N}a_i-K.3K+i=1∑N​ai

所以,只需最大化满足上述条件的非负整数 xix_ixi​ 的总和。

动态规划

令 M=max⁡iaiM=\max_i a_iM=maxi​ai​,B=⌊M/2⌋B=\lfloor M/2\rfloorB=⌊。每个 都在 到 之间。

在处理位置 iii 之前,定义 dp[p][q]\mathrm{dp}[p][q]dp[p][q] 为:位置 i−1i-1i−1 及之前的条件均满足,且 xi−1=px_{i-1}=px、 时,已经确定的 的最大总和。不可行状态取负无穷。初始时 ,其余状态不可行。

选择 r=xi+1r=x_{i+1}r=xi+1​ 后,当前位置的条件为 p+2q+r≤aip+2q+r\le a_ip+2q+r≤,转移为

next[q][r]=r+max⁡0≤p≤min⁡(B,ai−2q−r)dp[p][q].\mathrm{next}[q][r]=r+\max_{0\le p\le\min(B,a_i-2q-r)}\mathrm{dp}[p][q].next[q][r]=r+0≤

当 i+1≥Ni+1\ge Ni+1≥N 时,只允许 r=0r=0r=0。对每个固定的 qqq,沿 ppp 计算前缀最大值,即可在 时间内计算每次转移。处理完位置 后, 就是最多的攻城攻击次数。

转移枚举了所有可能的下一个次数,并且恰好检查当前位置的生命值条件。由归纳法可知,DP 保留了所有可行安排及其最大次数。答案为 ∑iai−dp[0][0]\sum_i a_i-\mathrm{dp}[0][0]∑i​ai​−dp[0][0]。

时间复杂度为 O(N(B+1)2)O(N(B+1)^2)O(N(B+1)2),空间复杂度为 O((B+1)2)O((B+1)^2)O((B+1)。因为 ,所以 。使用 的写法也适用于所有生命值都为 的情况。

子任务

  • 子任务 111:以当前生命值向量为状态,直接尝试两种攻击。时间为 O(N∏i(ai+1))O(N\prod_i(a_i+1))O(N∏i​(ai​+1)),空间为 。当 、 时,状态数至多为 。

Solution written by GPT6

x1​=
xN​=
xN+1​=
0
i+1
​
≤
ai​.
​
−
4K=
i=1∑N​ai​−
K.
M
/2
⌋
xix_ixi​
000
BBB
i−1
​
=
p
xi=qx_i=qxi​=q
x1,⋯ ,xix_1,\cdots,x_ix1​,⋯,xi​
dp[0][0]=0\mathrm{dp}[0][0]=0dp[0][0]=0
ai​
p
≤
min
(
B
,
ai​
−
2
q
−
r
)
max
​
dp
[
p
]
[
q
]
.
O(1)O(1)
O(1)
NNN
dp[0][0]\mathrm{dp}[0][0]dp[0][0]
2
)
M≤100M\le100M≤100
B≤50B\le50B≤50
B+1B+1B+1
000
O(∏i(ai+1))O(\prod_i(a_i+1))O(∏i​(ai​+1))
N≤8N\le8N≤8
ai≤4a_i\le4ai​≤4
58=390 6255^8=390\,62558=390625
  • 子任务 222:不使用前缀最大值,枚举全部 p,q,rp,q,rp,q,r。时间为 O(N(B+1)3)O(N(B+1)^3)O(N(B+1)3),空间为 O((B+1)2)O((B+1)^2)O((B+1)2)。
  • 子任务 333:使用前缀最大值优化后的完整解法。