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

Pythonで複数のコピーを取得することにより、ナップサック問題で取得できる最大値を見つけるプログラム


重みと値と呼ばれる同じ長さの2つのリストがあり、別の値容量もあるとします。ここで、weights[i]とvalues[i]は、i番目のアイテムの重みと値を表します。最大で容量の重みを取得でき、アイテムごとに任意の数のコピーを取得できる場合は、取得できる最大の価値を見つける必要があります。

したがって、入力が重み=[1、2、3]、値=[1、5、3]、容量=5のような場合、出力は11

になります。

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

  • 関数dp()を定義します。これにはi、kが必要です
  • iがウェイトのサイズと同じである場合、
    • 0を返す
  • ans:=dp(i + 1、k)
  • k> =weights [i]の場合、
    • ans:=ansとdp(i、k-重み[i])+値の最大値[i]
  • 回答を返す
  • メインの方法から次のようにします-
  • return dp(0、capacity)

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

class Solution:
   def solve(self, weights, values, capacity):
      def dp(i, k):
         if i == len(weights):
            return 0
         ans = dp(i + 1, k)
         if k >= weights[i]:
            ans = max(ans, dp(i, k - weights[i]) + values[i])
         return ans
      return dp(0, capacity)
ob = Solution()
weights = [1, 2, 3]
values = [1, 5, 3]
capacity = 5
print(ob.solve(weights, values, capacity))

入力

[1, 2, 3], [1,5,3], 5

出力

11

  1. Pythonで一度株式市場で購入することで得られる最大の利益を見つけるためのプログラム

    会社の株価を時系列で表す価格のリストがあるとすると、その株を1回だけ売買することで得られる最大の利益を見つける必要があります。販売する前に購入する必要があることを覚えておく必要があります。 したがって、入力が価格=[10、12、9、6、8、12]の場合、出力は6になります。これは、6で購入し、12で販売できるためです。 これを解決するには、次の手順に従います- max_profit:=0 min_stock:=無限大 価格の各価格について、 max_profit:=max_profitの最大値と(price --min_stock) min_stock:=min_stockと価

  2. 辞書で2番目に大きい値を見つけるPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの整数が与えられているので、辞書に2番目に大きい値を出力する必要があります それでは、以下の実装の概念を見てみましょう- アプローチ1-負のインデックスによるsorted()関数の使用 例 #input example_dict ={"tutor":3, "tutorials":15, "point":9,"tutorialspoint":19} # sorting the given list and get the