링크
배열요소의 합이 최대가 되도록 최대 길이k 로 배열을 분할하는 문제
분할된 각 부분 배열들은 모두 최대값으로 대치됨
ex. [1, 15, 7, 9, 2, 5, 10] => [15, 15, 15, 9, 10,10, 10]
if len(arr) < k:
return max(arr) * len(arr)
dp = [0] * len(arr)
for i in range(len(arr)):
if i < k:
dp[i] = max(arr[:i + 1]) * (i + 1)
else:
caseArr = [dp[i-step] + max(arr[i-step + 1 : i + 1]) * step for step in range(1, k + 1)]
dp[i] = max(caseArr)
return dp[-1]
N = len(arr)
dp = [0] * (N + 1)
for i in range(1, N + 1):
curMax = 0
for s in range(1, min(k, i) + 1):
curMax = max(curMax, arr[i - s])
dp[i] = max(dp[i], dp[i - s] + curMax * s)
return dp[N]
N = len(arr)
dp = [0] * N
dp[0] = arr[0]
for i in range(N):
if i < k:
dp[i] = max(arr[:i + 1]) * (i + 1)
continue
curMax = arr[i]
for s in range(1, k + 1):
curMax = max(curMax, arr[i - s + 1])
dp[i] = max(dp[i], dp[i - s] + curMax * s)
return dp[-1]