1
/** https://leetcode.com/problems/partition-array-for-maximum-sum/2
* @param {number[]} arr6
var maxSumAfterPartitioning = function (arr, k) {7
// Array to hold max value for each integer in `arr`8
let dp = Array(arr.length).fill(0);11
// Calculate max value for each integer12
for (let i = 1; i < arr.length; i++) {13
// The `maxK` is largest number from `i` to `i - k - 1`16
// The `maxVal` is for holding max value to be added to `dp[i]`19
// Loop through `i` to `i - k - 1`20
for (let j = 1; j <= k; j++) {22
maxK = Math.max(maxK, arr[i - (j - 1)]);24
// Calculate `maxVal`, if current `i` is smaller than `k`, we don't need to continue26
maxVal = Math.max(maxVal, maxK * j);30
maxVal = Math.max(maxVal, dp[i - j] + maxK * j);37
return dp[dp.length - 1];