Please sign in first.
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 |
|
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 |