Official
C - 隣接ペナルティ付き選択 / Selection with Adjacent Penalty Editorial
by
C - 隣接ペナルティ付き選択 / Selection with Adjacent Penalty Editorial
by
sounansya
\(d[i][c]\) を「\(i\) 日目までを考え、\(i\) 日目の仕事を \(c=1\) なら引き受けた、\(c=0\) なら引き受けなかった場合の利益の最大値」とした動的計画法を考えます。
この動的計画法の遷移は \(d[i][0] = \max(d[i-1][0],d[i-1][1]),\ d[i][1] = \max(d[i-1][0],d[i-1][1]-K)+A_i\) となります。この遷移に基づいて値を計算していけば良いです。
n, k = map(int, input().split())
a = list(map(int, input().split()))
d0, d1 = 0, -(10**18)
for v in a:
d0, d1 = max(d0, d1), max(d0, d1 - k) + v
print(max(d0, d1))
posted:
last update:
