DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

こっちはシージモード、あっちはドンドンドンドンドンドン!

問題に戻る

解説

無駄なダメージを与える攻撃の除去

列の端を対象にしたシージモードの攻撃で減る体力の総和は最大 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−K3K+\sum_{i=1}^{N}a_i-4K=\sum_{i=1}^{N}a_i-K3K+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≤p

である。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​
≤
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: 累積最大値を用いた全体の解法を使う。