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

Pythonの容量内でさまざまなアイテムを取得することで取得できる最大量を見つけるためのプログラム


同じ長さの重みと値と呼ばれる2つのリストと、容量kと呼ばれる別の数があるとします。ここで、weights[i]とvalues[i]は、i番目のアイテムの重みと値を示しています。これで、最大でk個の容量の重みを取得でき、各アイテムの最大で1つのコピーしか取得できないため、取得できる値の最大量を見つける必要があります。

したがって、入力が重み=[2、3、4]、値=[2、6、4]、容量=6のような場合、出力は8になります

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

  • n:=おもりのサイズ
  • dp:=サイズ容量x nの行列で、0で埋めます
  • 0からnの範囲のiについては、
    • 0から容量までの範囲のjについては、
      • iが0と同じか、jが0と同じ場合、
        • dp [i、j]:=0
      • それ以外の場合、weights [i-1] <=jの場合、
        • dp [i、j] =(dp [i-1、j-weights [i-1]] + values [i-1])および(dp [i-1、j])の最大値
        • >
      • それ以外の場合、
        • dp [i、j]:=dp [i-1、j]
  • return dp [n、capacity]

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

class Solution:
   def solve(self, weights, values, capacity):
      n=len(weights)
      dp=[[0 for i in range(capacity+1)]
      for _ in range(n+1)]
         for i in range(n+1):
            for j in range(capacity+1):
               if i==0 or j==0:
                  dp[i][j]=0
                  elif weights[i-1]<=j:
                     dp[i][j]=max(dp[i-1][j-weights[i-1]]+values[i-1],dp[i-1][j])
                  else:
                     dp[i][j]=dp[i-1][j]
      return dp[n][capacity]
ob = Solution() weights = [2, 3, 4] values = [2, 6, 4]
capacity = 6
print(ob.solve(weights, values, capacity))

入力

[2, 3, 4], [2, 6, 4], 6

出力

8

  1. 辞書内のすべての項目の合計を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −辞書が与えられたので、辞書の中で最も高い3つの値を出力する必要があります。 問題ステートメントへの3つのアプローチを以下に示します。 アプローチ1-反復可能な辞書から合計を計算する 例 # sum function def Sum(myDict):    sum_ = 0    for i in myDict:       sum_ = sum_ + myDict[i]    return sum_ # Driver

  2. 最大3つの数字を見つけるPythonプログラム

    このチュートリアルでは、3つの数字から最大量を見つけるプログラムを作成します。 3つの数字があり、その3つの数字から最大数を見つけることが目標です。 理解を深めるために、いくつかのサンプルテストケースを見てみましょう。 Input: a, b, c = 2, 34, 4 Output: 34 Input: a, b, c = 25, 3, 12 Output: 25 Input: a, b, c = 5, 5, 5 Output: 5 以下の手順に従って、3つの数字の中から最大数を見つけてください。 アルゴリズム 1. Initialise three numbers a, b