1043. Partition Array for Maximum Sum

版权声明:本文为博主原创文章,未经博主允许不得转载。 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. 1 <= K <= A.length <= 500
  2. 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]
    

做前面那题做崩了,一开始连题目也看错了,各种边界也没处理好

猜你喜欢

转载自blog.csdn.net/zjucor/article/details/90140336