スパークリング黒ココア/ABC285 E - Work or Rest

Created Sun, 15 Jan 2023 Modified Tue, 26 Sep 2023 09:13:30 +0000
183 Words

問題

ABC285 E - Work or Rest

お気持ち

  • B問題と同じく、問題文をちゃんと読んで、実験して、しっかりDPに落とし込めたらこんなに簡単だった…
  • 前処理ちゃんと丁寧にできたら、所詮1次元DPだった…ううう、悔しい…

ソースコード

N = int(input())
A_L = list(map(int, input().split()))

if N == 1:
    print(0)
    exit()
elif N == 2:
    print(A_L[0])
    exit()

B_L = []
for i in range(N):
    B_L.append(A_L[i])
    B_L.append(A_L[i])
accum_L = [0]
for b in B_L:
    accum_L.append(accum_L[-1] + b)

dp = [0] * (N + 5)
dp[1] = accum_L[1]
dp[2] = accum_L[2]
dp[3] = accum_L[3]

for renkin in range(4, N):
    dp[renkin] = accum_L[renkin]

    for i in range(1, renkin - 1):
        dp[renkin] = max(dp[renkin], dp[i] + dp[renkin - 1 - i])
print(dp[N - 1])