問題
L – Deque
参考
例題 3. EDPC L 問題 – Deque 〜 得点差も最大化したい 〜
Deque [Educational DP Contest / DP まとめコンテスト L]
回答
DP
PyPyではAC。
import sys
# input処理を高速化する
input = sys.stdin.readline
def chmax(a, b):
if a >= b:
return a
return b
def chmin(a, b):
if a <= b:
return a
return b
def main():
N = int(input())
a = list(map(int, input().split()))
# aiからajのX−Yの最大値
# [左端,右端)=[l,r)からの遷移
# 左をとる[l+1,r)、右をとる[l,r−1)の2通り
dp = [[0] * (N+2) for _ in range(N+2)]
for len in range(1, N + 1):
for i in range(N + 1 - len):
j = i + len
if (N - len) % 2 == 0:
dp[i][j] = chmax(dp[i + 1][j] + a[i], dp[i][j - 1] + a[j - 1])
else:
dp[i][j] = chmin(dp[i + 1][j] - a[i], dp[i][j - 1] - a[j - 1])
print(dp[0][N])
main()