55. Partition Array for Maximum Sum
Input: arr = [1,15,7,9,2,5,10], k = 3
Output: 84
Explanation: arr becomes [15,15,15,9,10,10,10]Input: arr = [1,4,1,5,7,3,6,1,9,9,3], k = 4
Output: 83Input: arr = [1], k = 1
Output: 1Solution: (DP)
class Solution
{
public:
int maxSumAfterPartitioning(vector<int> &arr, int k)
{
int n = arr.size();
vector<int> dp(n + 1, 0);
for (int i = 1; i <= n; i++)
{
int maxVal = 0;
int maxSum = 0;
for (int j = 1; j <= k; j++)
{
if (i - j >= 0)
{
maxVal = max(maxVal, arr[i - j]);
maxSum = max(maxSum, dp[i - j] + maxVal * j);
}
}
dp[i] = maxSum;
}
return dp[n];
}
};Last updated