Jae-Kyung Cho LLM Developers who was a Robotics engineer

Baekjoon-2281-데스노트

$ dp[i] = min(dp[i], (m-V[i])^2+dp[i+1], (m-V[i]-V[i+1])^2+dp[i+1],…) $

import sys
input = sys.stdin.readline

n,m = map(int, input().split())
names = [int(input()) for _ in range(n)]
infty = int(1e9)

# 뒤부터 보는 게 핵심
dp = [infty for _ in range(n)]
dp[n-1] = 0

for i in reversed(range(n-1)):
    if sum(names[i:]) + len(names[i:]) - 1 <= m:
        dp[i] = 0
    else:
        j = i+1
        line_sum = names[i]
        while line_sum <= m and j < n:
            dp[i] = min(dp[j] + (m-line_sum)**2, dp[i])
            line_sum += 1 + names[j]
            j += 1

print(dp[0])
Comments