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

Pythonでいくつかの割り当てを完了することによって取得できる最大のクレジットを見つけるためのプログラム


同じサイズの2つのリストがあり、これらは期限とクレジットであり、コースの割り当てを表しているとします。ここで、deadlines [i]は割り当てiの期限日を示し、credits[i]は割り当てiで取得するクレジットの量を表します。課題を完了する日は1日あり、締め切り日の前または締め切り日に完了することができます。複数の割り当てを同時に実行することはできません。課題のサブセットを完了することで獲得できる最大のクレジットを見つける必要があります。

したがって、入力が期限=[1、2、2、2]クレジット=[4、5、6、7]のようである場合、0日目にクレジット5で割り当てを完了することができるため、出力は18になります。 1日目にクレジット6で割り当て、3日目にクレジット7で割り当てを完了します。

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

  • a:=期限とクレジットのペアを作成し、クレジットに基づいて降順で並べ替えます
  • aが空の場合、
    • 0を返す
  • res:=サイズのリスト(1 +期限の最大値)と0で埋める
  • ans:=0
  • aの各ペア(i、j)について、実行します
    • iから0までの範囲のkについては、1ずつ減らします。
      • res [k]が0の場合、
        • res [k]:=1
        • ans:=ans + j
        • ループから抜け出す
  • 回答を返す

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

class Solution:
   def solve(self, deadlines, credits):
      a = sorted(list(zip(deadlines, credits)), key=lambda x: x[1], reverse=True)
      if not a:
         return 0
      res = [0] * (max(deadlines) + 1)
      ans = 0
      for i, j in a:
         for k in range(i, -1, -1):
            if not res[k]:
               res[k] = 1
               ans += j
               break
      return ans
     
ob = Solution()
deadlines = [1, 2, 2, 2]
credits = [4, 5, 6, 7]
print(ob.solve(deadlines, credits))

入力

[1, 2, 2, 2], [4, 5, 6, 7]

出力

18

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

    会社の株価を時系列で表す価格のリストがあるとすると、その株を何度でも売買することで得られる最大の利益を見つける必要があります。販売する前に購入する必要があることを覚えておく必要があります。 したがって、入力が価格=[10、50、30、40、60]の場合、出力は70になります。これは、10で購入、50で販売、30で購入、60で販売できるためです。 これを解決するには、次の手順に従います- prev_price:=無限大 利益:=0 価格の各pについて、 prev_priceの場合、 利益:=利益+ p --prev_price prev_price:=p 利益を返す

  2. 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と価