[LeetCode] Partition Array for Maximum Sum

배열을 분할하여 각 분할의 최대값 합을 최대화하는 문제
arr을 순회하며 k 범위 내의 최대값을 추적한다.dp에 저장한다.public class Solution {
public int maxSumAfterPartitioning(int[] arr, int k) {
int n = arr.length;
int[] dp = new int[n];
for (int i = 0; i < n; i++) {
int max = 0;
for (int j = 1; j <= k && i - j + 1 >= 0; j++) {
max = Math.max(max, arr[i - j + 1]);
dp[i] = Math.max(dp[i], (i - j >= 0 ? dp[i - j] : 0) + max * j);
}
}
return dp[n - 1];
}
}