Pythonで勉強するための効率的な方法を見つけるためのプログラム
長さが同じである3つのリストがあるとします。これらは、期限、クレジット、および期間です。それらはコースの割り当てを表しています。 i番目の割り当ての期限[i]は期限を示し、credits [i]はクレジットを示し、durations[i]は割り当てを完了するのにかかる日数を示します。別の割り当てを開始する前に、1つの割り当てを完了する必要があります。期限の日に課題を完了することができ、現在は0日目の開始になっていることを覚えておく必要があります。
したがって、入力が次のようである場合、期限=[7、5、10]、クレジット=[8、7、10]、期間=[5、4、10]の場合、出力は10になります。
これを解決するには、次の手順に従います-
-
jobs:=リストのzipを並べ替える(期限、期間、クレジット)
-
関数dp()を定義します。
-
i> =ジョブのサイズの場合、
-
0を返す
-
-
ans:=dp(i + 1、日)
-
期限、期間、クレジット:=ジョブ[i]
-
日+期間-1<=期限の場合、
-
ans:=ansの最大値、dp(i + 1、日+期間)+クレジット
-
-
ansを返す
-
メインメソッドからreturndp(0、0)
理解を深めるために、次の実装を見てみましょう-
例
class Solution: def solve(self, deadlines, credits, durations): jobs = sorted(zip(deadlines, durations, credits)) def dp(i=0, day=0): if i >= len(jobs): return 0 ans = dp(i + 1, day) deadline, duration, credit = jobs[i] if day + duration − 1 <= deadline: ans = max(ans, dp(i + 1, day + duration) + credit) return ans return dp() ob = Solution() deadlines = [7, 5, 10] credits = [8, 7, 10] durations = [5, 4, 10] print(ob.solve(deadlines, credits, durations))
入力
[7, 5, 10], [8, 7, 10], [5, 4, 10]
出力
10
-
グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム
0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ
-
Pythonプログラムで行列の転置を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −行列が与えられたので、行列の転置を表示する必要があります。 行列の転置は、A[i][j]に存在する値をA[j][i]に置き換えることによって得られます。 それでは、以下の実装の概念を見てみましょう- アプローチ1:入力行列の転置を格納するための新しい行列を作成する 例 def transpose(A,B): for i in range(M): for j in range(N):