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

PythonでKタスクを完了するための最大時間を見つけるプログラム


各行に3つの値があるタスクのマトリックスがあるとします。別の値kもあります。タスクからk行を選択し、Sと呼び、次の合計が最小化され、合計が次のように返されるようにする必要があります:maximum of(S [0、0]、S [1、0]、... S [k- 1、0])+最大(S [0、1]、S [1、1]、... S [k-1、1])+最大(S [0、2]、S [1、 2]、... S [k-1、2])次のように言うこともできます。3つの列のそれぞれがコストに寄与し、Sでその列の最大値をとることによって計算されます。空の最大値リストは0です。

したがって、入力がtasks =[[2、3、3]、[4、5、2]、[4、2、3]]、k =2のような場合、出力は10になります。最初の行と最後の行。合計はS=[[2,3,3]、[4,2,3]] max(S [0,0]、S [1,0])=4 + max(S [0,1] ]、S [1,1])=3 + max(S [0,2]、S [1,2])=3 =10

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

  • 関数util()を定義します。これにはBがかかります
  • リストBを並べ替える
  • yheap:=0からK-1の範囲の各iに対して-B[i、1]を含むリスト
  • yheapをヒープ化する
  • ans:=B [K-1、0] +(-yheap [0])
  • KからBのサイズの範囲のiについては、
    • x:=B [i、0]
    • yheapを-B[i、1]に置き換えます
    • yheapの設定サイズはKと同じです
    • y:=-yheap [0]
    • ans:=最小のansとx + y
  • 回答を返す
  • メインの方法から次のようにします-
  • Aが空またはKが0の場合、
    • 0を返す
  • リストAを並べ替える
  • B:=0からK-1の範囲の各iのペア[A[i、1]、A [i、2]]のリストを作成します
  • ans:=A [K-1、0] + Bの各(y、z)の最大y + Bの各(y、z)の最大z
  • KからAのサイズの範囲のiについては、
    • [A [i] [1]、A[i][2]]をBに挿入
    • ans=最小のansおよびA[i、0] + util(B)
  • 回答を返す

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

import heapq
class Solution:
   def solve(self, A, K):
      if not A or not K:
         return 0
      def util(B):
         B.sort()
         yheap = [-B[i][1] for i in range(K)]
         heapq.heapify(yheap)
         ans = B[K - 1][0] + (-yheap[0])
         for i in range(K, len(B)):
            x = B[i][0] heapq.heappushpop(yheap, -B[i][1])
            assert len(yheap) == K
            y = -yheap[0]
         ans = min(ans, x + y)
         return ans
         A.sort()
         B = [[A[i][1], A[i][2]] for i in range(K)]
         ans = A[K - 1][0] + max(y for y, z in B) + max(z for y, z in B)
         for i in range(K, len(A)):
            B.append([A[i][1], A[i][2]])
            ans = min(ans, A[i][0] + util(B))
         return ans
ob = Solution()
tasks = [ [2, 3, 3], [4, 5, 2], [4, 2, 3] ]
k = 2
print(ob.solve(tasks, k))

入力

tasks = [
[2, 3, 3],
[4, 5, 2],
[4, 2, 3] ],
k = 2

出力

10

  1. Pythonの任意の場所に5を追加して最大数を見つけるプログラム

    数nがあるとすると、その数のどこかに5を挿入して、取得できる最大数を見つける必要があります。 したがって、入力がn =834の場合、出力は8534になります。 これを解決するには、次の手順に従います- 0の場合、 s:=n as string k:=空白の文字列 c:=False sの各文字iについて、実行します i <5でcがFalseの場合、 k:=k連結5連結i c:=True それ以外の場合 k:=k連結i kを整数として返す それ以外の場合 k:=空白の文字列 s:=| n

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

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