Menu
CoddyTech

Job Sequencing Problem

ふつう貪欲法ソートpython iconjava iconcpp iconc iconjs icon+10

n 個の仕事が 2 つの配列で与えられます。仕事 i は、時間 deadline[i] までに完了すると profit[i] の利益を得られます。各仕事にかかる時間は 1 単位で、時刻 0 から一度に 1 つの仕事を行い、任意の仕事をスキップできます。締め切りが 2 の仕事は、時刻 0 から 1 または時刻 1 から 2 まで実行できます。

得られる利益の合計の最大値を返してください。

関数

jobSequencing(deadline: integer-array, profit: integer-array) → integer
deadlineinteger-array
各ジョブを完了しなければならない期限(1 から n まで)
profitinteger-array
各仕事がどれだけ稼ぐか; profit[i] は deadline[i] に属する
戻り値integer
すべての仕事を締め切りまでに完了できる場合の、最大の総利益

制約

  • 1 ≤ deadline.length == profit.length ≤ 5000
  • 1 ≤ deadline[i] ≤ n。ここで、n はジョブの数です。
  • 1 ≤ profit[i] ≤ 105
  • 配列はソートされていません。複数のジョブが同じ期限または利益を持つ場合があります。

例

入力
deadline = [3, 1, 2, 3, 1]profit = [40, 35, 30, 25, 50]
出力
120
説明
締め切り1の仕事は2つのうち1つしか入らないので、価値が50の仕事を実行します。価値が30の仕事は締め切り2に、価値が40の仕事は締め切り3に間に合います:50 + 30 + 40 = 120。
challenge icon

発展問題

ジョブ i にかかる時間が1単位ではなく duration[i] 単位だとしたらどうでしょうか?最も利益の大きいジョブを最初に選ぶことで、依然として合計の利益が最大になるでしょうか?

コードをリセット
def jobSequencing(deadline, profit):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

deadline = [3, 1, 2, 3, 1]
profit = [40, 35, 30, 25, 50]

期待される出力

120