Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで合計を最大化するためのパーティション配列


整数配列Aがあるとすると、配列を最大Kの長さの(連続した)サブ配列に分割する必要があります。分割後、各サブ配列の値は、そのサブ配列の最大値になるように変更されます。パーティション分割後、指定された配列の最大の合計を見つける必要があります。したがって、入力が[1、15、7、9、2、5、10]のようで、k =3の場合、出力は84になります。これは、配列が[15、15、15、9、10、10 、10]

これを解決するには、次の手順に従います-

  • Aと同じ長さの配列dpを1つ作成し、これを0で埋めます
  • 0からA-1の長さの範囲のiの場合
    • dp [i] =A [i] + dp [i-1](i – 1> =0の場合)それ以外の場合は0
    • temp:=A [i]
    • 1からk–1の範囲のjの場合
      • if i – j> =0
        • インデックス:=i – j
        • temp:=tempとA[i--j]の最大値
        • インデックス– 1> =0の場合、
          • dp [i]:=dp [i]の最大値と(temp *(i – index + 1)+ dp [index-1])
        • それ以外の場合、dp [i]:=dp[i]と0の最大値
  • dpの最後の要素を返す

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def maxSumAfterPartitioning(self, A, K):
      dp = [0 for i in range(len(A))]
      for i in range(len(A)):
         dp[i] = A[i] + (dp[i-1] if i-1>=0 else 0)
         temp = A[i]
         for j in range(1,K):
            if i-j>=0:
               index = i-j
               temp = max(temp,A[i-j])
               dp[i] = max(dp[i],temp*(i-index+1) + (dp[index-1] if index-1 >=0 else 0))
      return dp[-1]
ob = Solution()
print(ob.maxSumAfterPartitioning([1,15,7,9,2,5,10],3))

入力

[1,15,7,9,2,5,10]
3

出力

84

  1. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '

  2. 挿入ソート用のPythonプログラム

    この記事では、Python3.xでの挿入ソートの実装について学習します。またはそれ以前。 アルゴリズム 1. Iterate over the input elements by growing the sorted array at each iteration. 2. Compare the current element with the largest value available in the sorted array. 3. If the current element is greater, then it leaves the element in its place &n