解题思路:
class Solution {
public:
int getMaxValue(int* arr, int start, int end) //找出一段区间内的最大数
{
int res = 0;
for (int i = start; i <= end; i++)
{
res = max(res, arr[i]);
}
return res;
}
int maxSumAfterPartitioning(vector<int>& arr, int k)
{
int length = arr.size();
vector<int> dp(length+1 , 0); //开辟空间+初始化
for (int i = 1; i <= k; i++) // i<=k还未到最大分隔数
{
dp[i] = getMaxValue(&arr[0] , 0 , i-1 ) * i;
}
for (int i = k+1; i <= length; i++)
{
for (int j = 1; j <= k; j++)
{
dp[i] = max(dp[i - j] + getMaxValue(&arr[0] , i-j , i-1) * j, dp[i]);
}
}
return dp[length];
}
};