公式
C - 山岳トレイル / Mountain Trail 解説
by
C - 山岳トレイル / Mountain Trail 解説
by
sounansya
\(d[i]\) を地点 \(i\) にいる状態での体力の最大値、と定義した動的計画法を行うことでこの問題に正答することができます。
\(d[i]\) が負である状態から \(d[i+1],d[i+2]\) に遷移できないことに注意してください。
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]))
