Menu
CoddyTech

Job Sequencing Problem

MoyenGloutonTripython iconjava iconcpp iconc iconjs icon+10

Vous disposez de n tâches représentées par deux tableaux : la tâche i rapporte profit[i] si elle se termine au plus tard à deadline[i]. Chaque tâche prend une unité de temps, vous exécutez une tâche à la fois à partir du temps 0 et vous pouvez ignorer n’importe quelle tâche. Une tâche avec une échéance de 2 peut être exécutée de 0 à 1 ou de 1 à 2.

Renvoyez le profit total maximal que vous pouvez obtenir.

Fonction

jobSequencing(deadline: integer-array, profit: integer-array) → integer
deadlineinteger-array
le délai auquel chaque tâche doit être terminée, de 1 à n
profitinteger-array
ce que rapporte chaque tâche ; profit[i] correspond à deadline[i]
Renvoieinteger
le profit total maximal des tâches qui peuvent toutes se terminer avant leurs échéances

Contraintes

  • 1 ≤ deadline.length == profit.length ≤ 5000
  • 1 ≤ deadline[i] ≤ n, où n est le nombre de tâches
  • 1 ≤ profit[i] ≤ 105
  • Les tableaux ne sont pas triés. Plusieurs tâches peuvent avoir la même échéance ou le même profit.

Exemples

Entrée
deadline = [3, 1, 2, 3, 1]profit = [40, 35, 30, 25, 50]
Sortie
120
Explication
Un seul des deux travaux ayant une échéance de 1 peut être effectué, alors effectuez celui qui vaut 50. Le travail qui vaut 30 se termine ensuite à son échéance de 2 et celui qui vaut 40 à son échéance de 3 : 50 + 30 + 40 = 120.
challenge icon

Pour aller plus loin

Et si la tâche i prenait duration[i] unités de temps au lieu d’une seule ? Commencer par la tâche la plus rentable donne-t-il toujours le meilleur total ?

Réinitialiser le code
def jobSequencing(deadline, profit):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

120