zoukankan      html  css  js  c++  java
  • 【leetcode】1043. Partition Array for Maximum Sum

    题目如下:

    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[i][j] 表示第i个元素为第j个子数组的最后一个元素时,A[0:i]可以获得的最大值。那么有dp[i][j] = max(dp[i][j], dp[m][j-1] + max_val[m+1][i] * (i-m))   ( i-k < m < i) 。

    代码如下:

    class Solution(object):
        def maxSumAfterPartitioning(self, A, K):
            """
            :type A: List[int]
            :type K: int
            :rtype: int
            """
            import math
            dp = []
            max_val = []
            sub = int(math.ceil(float(len(A))/K))
            for i in A:
                dp.append([0] * sub)
                max_val.append([0]*len(A))
            for i in range(len(A)):
                max_val[i][i] = A[i]
                for j in range(i+1,len(A)):
                    max_val[i][j] = max(max_val[i][j-1],A[j])
            dp[0][0] = A[0]
            for i in range(len(A)):
                for j in range(sub):
                    #print i,j
                    if i-K< 0:
                        dp[i][j] = max(A[0:i+1]) * (i+1)
                    else:
                        for m in range(i-K,i):
                            dp[i][j] = max(dp[i][j], dp[m][j-1] + max_val[m+1][i] * (i-m))
            #print dp
            return dp[-1][-1]
  • 相关阅读:
    jquery ajax参数详解
    压缩解压函数实现
    WCF 大数据量如何从服务端传到客户端
    [DllImport("kernel32.dll")]
    Oracle数据库使用基础和实例
    Js常用的动态效果
    Js使用正则实现表单验证
    Oracle数据库理论知识
    HTML5,CSS3,JavaScript基础知识与使用
    速读《人月神话》
  • 原文地址:https://www.cnblogs.com/seyjs/p/11044749.html
Copyright © 2011-2022 走看看