Submission #24428557


Source Code Expand

import sys

def main(f):
  N = int(f.readline())
  A = [None] + list(map(int, f.readline().split()))

  # N は偶数と仮定する
  dp = [[None] * (N+1) for _ in range(N+1)] # dp[i][j] : 残りが a_i ... a_j の時の状態価値関数、つまり、この後に X-Y に追加できる値
  for i in range(1, N+1): # 幅 d = 1 の場合
    dp[i][i] = -A[i]

  for d in range(2, N+1):
    for i in range(1, N-d+2):
      j = i + d - 1
      if d % 2 == 0:
        case_l = A[i] + dp[i+1][j]
        case_r = A[j] + dp[i][j-1]
        dp[i][j] = max(case_l, case_r)
      else:
        case_l = -A[i] + dp[i+1][j]
        case_r = -A[j] + dp[i][j-1]
        dp[i][j] = min(case_l, case_r)

  if N % 2 == 0:
    print(dp[1][N])
  else: # N が奇数だった場合は符号違いを答えればよい
    print(-dp[1][N])

main(sys.stdin)

Submission Info

Submission Time
Task L - Deque
User enakai
Language PyPy3 (7.3.0)
Score 100
Code Size 868 Byte
Status AC
Exec Time 750 ms
Memory 214656 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 19
Set Name Test Cases
All 0_00, 0_01, 0_02, 0_03, 0_04, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13
Case Name Status Exec Time Memory
0_00 AC 68 ms 61720 KiB
0_01 AC 55 ms 61680 KiB
0_02 AC 53 ms 61904 KiB
0_03 AC 53 ms 61844 KiB
0_04 AC 57 ms 61684 KiB
1_00 AC 52 ms 61708 KiB
1_01 AC 52 ms 61816 KiB
1_02 AC 620 ms 213016 KiB
1_03 AC 617 ms 212724 KiB
1_04 AC 711 ms 213460 KiB
1_05 AC 702 ms 214124 KiB
1_06 AC 747 ms 212524 KiB
1_07 AC 742 ms 212440 KiB
1_08 AC 750 ms 212216 KiB
1_09 AC 743 ms 214656 KiB
1_10 AC 743 ms 214212 KiB
1_11 AC 745 ms 212060 KiB
1_12 AC 740 ms 214444 KiB
1_13 AC 745 ms 214468 KiB