每日一题1043. 分隔数组以得到最大和
题目链接:https://leetcode.cn/problems/partition-array-for-maximum-sum/description/
思路
直接用dp来做 较为简单
import java.util.Arrays;
class Solution {
public int maxSumAfterPartitioning(int[] arr, int k) {
int[] dp = new int[arr.length];
Arrays.fill(dp,0);
dp[0] = arr[0];
for (int i = 1;i<arr.length;i++){
int max = arr[i];
for (int j = i;j>=0 && j>=i-k+1;j--){
max = Math.max(arr[j],max);
if (j == 0 ){
dp[i] = Math.max((i+1) * max,dp[i]);
}else {
dp[i] = Math.max(dp[j-1]+(i-j+1)*max,dp[i]);
}
}
}
return dp[arr.length-1];
}
}