版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zjucor/article/details/90140336
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.
Example 1:
Input: A = [1,15,7,9,2,5,10], K = 3 Output: 84 Explanation: A becomes [15,15,15,9,10,10,10]
Note:
1 <= K <= A.length <= 500
0 <= A[i] <= 10^6
思路:DP,
class Solution(object):
def maxSumAfterPartitioning(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: int
"""
n=len(A)
ma=[[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
ma[i][i]=A[i]
for j in range(i+1,n): ma[i][j]=max(ma[i][j-1],A[j])
dp=[0 for _ in range(n)]
dp[0]=A[0]
for i in range(1,n):
for j in range(1,min(K+1,i+2)):
if i-j<0: dp[i]=max(dp[i],ma[0][i]*(i+1))
else: dp[i]=max(dp[i],dp[i-j]+ma[i-j+1][i]*j)
return dp[-1]
做前面那题做崩了,一开始连题目也看错了,各种边界也没处理好