1043. Partition Array for Maximum Sum
- Partition Array for Maximum Sum python solution
题目描述
Given an integer array A, you partition the array into (contiguous) subarrays of length at most K. After partitioning, each subarray has their values changed to become the maximum value of that subarray.
Return the largest sum of the given array after partitioning.
解析
使用动态规划来解题,利用dp[i]存储A[0]~A[i]的最大和,为了得到最大的dp[i],我们分别计算dp[i]中后k个元素的划分情况,并选取最大值。例如,A[i]单独作为一个区间,A[i-1],A[i]两个元素作为一个区间,…,A[i]~A[i-k+1]等k个元素作为一个区间,如下图所示。
class Solution:
def maxSumAfterPartitioning(self, A: List[int], K: int) -> int:
N = len(A)
dp = [0] * (N + 1)
for i in range(N):
curMax = 0
for k in range(1, min(K, i + 1) + 1):
curMax = max(curMax, A[i - k + 1])
dp[i] = max(dp[i], dp[i - k] + curMax * k)
return dp[N - 1]
Reference
https://zxi.mytechroad.com/blog/dynamic-programming/leetcode-1043-partition-array-for-maximum-sum/
https://leetcode.com/problems/partition-array-for-maximum-sum/discuss/290863/JavaC%2B%2BPython-DP