1043【leetcode】。最大合計パーティションのアレイ

次のように内容は次のとおりです。

整数配列を考えると  A、あなたは最大で長さの(連続した)サブアレイに配列を分割します  K分割後、各サブアレイは、サブアレイの最大値になるように変更され、それらの値を有しています。

分割後に指定された配列の最大の合計を返します。

 

例1:

入力:A = [1,15,7,9,2,5,10]、K = 3 
出力:84 
説明:Aはなる[15,15,15,9,10,10,10]

 

注意:

  1. 1 <= K <= A.length <= 500
  2. 0 <= A[i] <= 10^6

ソリューションの概要: [:I 0]が利用可能な最大とすることができるDP [I] [j]は、i番目のアレイのj番目の要素の最後の要素を示し、Aは仮定する。そこDP [I] [J] = MAX(DP [I]、[J]、DP [M] [J-1] + MAX_VAL [M + 1] [i]は*(IM))(IK <M <私)。

コードは以下の通りであります:

クラス溶液(オブジェクト):
     DEF maxSumAfterPartitioning(自己、A、K):
         "" " タイプA:リスト[INT] タイプK:INT 
        :RTYPE:INT 
        """ 
        インポート数学
        DP = [] 
        MAX_VAL = [] 
        サブ = INT(math.ceil(フロート(LEN(A))/ K))
         のために
            dp.append([0] * サブ)
            max_val.append([0] * (A)LEN)
         のための I における範囲(LEN(A)):
            MAX_VAL [I] [I]= A [i]の
             ための J における範囲(I + 1 、LEN(A)):
                MAX_VAL [I] [J] = MAX(MAX_VAL [I]、[J-1 ]、A [J])
        DP [0] [ 0] = [0]
         用の I における範囲(LEN(A))
             のために、J における範囲(サブ):
                印刷I、J 
                なら IK < 0:
                    DP [I] [J] = MAX([0: I + 1])*(I + 1 のための M における範囲(I- K、I):
                        DP [I] [J] = MAX(DP [I]、[J]、DP [M] [J-1] + MAX_VAL [M + 1] [I] *(I- M))
         #の印刷のDP 
        戻り DP [ -1] [ - 1]

 

ます。https://www.cnblogs.com/seyjs/p/11044749.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34281477/article/details/93158304