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

Pythonでトラックに乗せることができる最大ユニットを見つけるためのプログラム


boxTypesと呼ばれる2D配列として表されるボックスのセットがあるとします。ここで、boxTypes [i]には2つの要素[タイプiのボックスの数、タイプiのボックスあたりのユニット数]が含まれます。ここで、別の値kもあります。これは、そのトラックに置くことができるボックスの最大数です。ボックスの数がkを超えない限り、トラックに配置するボックスを選択できます。トラックに乗せることができるユニットの最大総数を見つける必要があります。

したがって、入力がboxTypes =[[2,4]、[3,3]、[4,2]]、k =6のような場合、出力は19になります。これは、

  • タイプ1の2つのボックスで、それぞれに4つのユニットが含まれています

  • タイプ2の3つのボックスで、それぞれに3つのユニットが含まれています

  • タイプ3の4つのボックスで、それぞれに2つのユニットが含まれています

k =6として、タイプ1と2のすべてのボックス、およびタイプ3の1つのボックスのみを取ることができるため、(2 * 4)+(3 * 3)+ 2 =8 + 9 +2=19アイテムになります。 。

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

  • 各ボックスに存在するアイテムの数に基づいてboxTypesを並べ替える

  • 合計:=0、塗りつぶし:=0

  • boxTypesの各iについて、実行します

    • fill + i [0] <=kの場合、

      • fill:=fill + i [0]

      • 合計:=合計+ i [0] * i [1]

    • それ以外の場合

      • 合計:=合計+(k-塗りつぶし)* i [1]

      • ループから出てきます

  • 合計を返す

例(Python)

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

def solve(boxTypes, k):
   boxTypes.sort(key = lambda x : x[1], reverse = True)
   total = 0
   fill = 0
   for i in boxTypes:
      if fill + i[0] <= k:
         fill += i[0]
         total += i[0] * i[1]
      else:
         total += (k - fill) * i[1]
         break
   return total

boxTypes = [[2,4],[3,3],[4,2]]
k = 6
print(solve(boxTypes, k))

入力

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

出力

19

  1. Pythonで利益を保持および販売することで得られる最大の利益を見つけるためのプログラム

    会社の株価を時系列で表すnumsという数字のリストがあるとします。 1日あたり最大1株の株式を購入できますが、複数の株式を保有し、任意の日数で株式を売却することができます。獲得できる最大の利益を返します。 したがって、入力がnums =[3、4、7、3、5]の場合、3と4で株を購入し、7で売ることができるため、出力は9になります。 5で売る。総利益(7-3)+(7-4)+(5-3)=9。 これを解決するには、次の手順に従います- ans:=0 numsが空でない間は、 top:=numsから最後の要素を削除 numsが空ではなく、numsの最後の要素である場合は、 ans:=

  2. Pythonで最大の建物の高さを見つけるプログラム

    値nと、制限と呼ばれるペアの別のリストがあるとします。都市にn棟の新しい建物を建てたいと思っています。ただし、制限はほとんどありません。私たちは一列に建てることができ、建物には1からnまでのラベルが付けられています。制限には2つのパラメーターがあるため、restrictions [i] =(id_i、max_height_i)は、id_iの高さがmax_height_i以下でなければならないことを示します。新しい建物の高さに関する市の制限は次のとおりです- 各建物の高さは0または正の値である必要があります。 最初の建物の高さは0でなければなりません。 隣接する2つの建物の高さ