ABC327E - Maximize Rating

解法1:dp

考え方

Editorial - HHKB Programming Contest 2023(AtCoder Beginner Contest 327)

回答例

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

dp = [[0]*(N+1) for _ in range(N+1)]

for i in range(N):
    for j in range(N):
        if j > i:continue
        dp[i+1][j] = max(dp[i+1][j], dp[i][j])
        dp[i+1][j+1] = max(dp[i+1][j+1], 0.9*dp[i][j] + P[i])

ans = -1<<60
denom = 1
for k in range(1, N+1):
    ans = max(ans, dp[N][k]/denom - 1200/(k**0.5))
    denom = 0.9 * denom + 1

print(ans)