Menu
CoddyTech

Job Sequencing Problem

Otrzymujesz n zadań w postaci dwóch tablic: zadanie i przynosi zysk profit[i], jeśli zostanie ukończone do czasu deadline[i]. Każde zadanie trwa jedną jednostkę czasu, wykonujesz jedno zadanie naraz, zaczynając w chwili 0, i możesz pominąć dowolne zadanie. Zadanie z terminem 2 można wykonać od 0 do 1 lub od 1 do 2.

Zwróć największy łączny zysk, jaki możesz osiągnąć.

Funkcja

jobSequencing(deadline: integer-array, profit: integer-array) → integer
deadlineinteger-array
czas, do którego każde zadanie musi zostać ukończone, od 1 do n
profitinteger-array
ile zarabia każda praca; profit[i] odpowiada deadline[i]
Zwracainteger
największy łączny zysk z zadań, które można ukończyć przed upływem ich terminów

Ograniczenia

  • 1 ≤ deadline.length == profit.length ≤ 5000
  • 1 ≤ deadline[i] ≤ n, gdzie n to liczba zadań
  • 1 ≤ profit[i] ≤ 105
  • Tablice nie są posortowane. Kilka zadań może mieć ten sam termin lub zysk.

Przykłady

Wejście
deadline = [3, 1, 2, 3, 1]profit = [40, 35, 30, 25, 50]
Wyjście
120
Wyjaśnienie
Mieści się tylko jedno z dwóch zadań z terminem 1, więc wykonaj to warte 50. Zadanie warte 30 kończy się wtedy w terminie 2, a zadanie warte 40 w terminie 3: 50 + 30 + 40 = 120.
challenge icon

Pytanie dodatkowe

Co jeśli zadanie i trwa duration[i] jednostek czasu zamiast jednej? Czy rozpoczęcie od najbardziej opłacalnego zadania nadal daje najlepszy wynik łączny?

Zresetuj kod
def jobSequencing(deadline, profit):
    # Wpisz tutaj kod

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

120