公式

C - 山岳トレイル / Mountain Trail 解説 by sounansya 印刷ページ


\(d[i]\) を地点 \(i\) にいる状態での体力の最大値、と定義した動的計画法を行うことでこの問題に正答することができます。

\(d[i]\) が負である状態から \(d[i+1],d[i+2]\) に遷移できないことに注意してください。

実装例(Python3)

import sys

input = sys.stdin.readline
n, m, k = map(int, input().split())
h = list(map(int, input().split()))
a = [0] * n
for i in range(m):
    p, r = map(int, input().split())
    a[p - 1] = r
d = [-1] * n
d[0] = k
for i in range(n):
    d[i] -= h[i]
    if d[i] < 0:
        continue
    d[i] += a[i]
    for j in (i + 1, i + 2):
        if j < n:
            d[j] = max(d[j], d[i])
print(max(-1, d[-1]))

投稿日時:
最終更新: