Menu
CoddyTech

Job Sequencing Problem

Recibes n trabajos como dos arreglos: el trabajo i genera profit[i] si termina antes o en el instante deadline[i]. Cada trabajo dura una unidad de tiempo, ejecutas un trabajo a la vez empezando en el instante 0 y puedes omitir cualquier trabajo. Un trabajo con fecha límite 2 puede ejecutarse de 0 a 1 o de 1 a 2.

Devuelve el mayor beneficio total que puedes obtener.

Función

jobSequencing(deadline: integer-array, profit: integer-array) → integer
deadlineinteger-array
el momento en que debe terminarse cada tarea, de 1 a n
profitinteger-array
lo que gana cada trabajo; profit[i] corresponde a deadline[i]
Devuelveinteger
el mayor beneficio total de los trabajos que pueden terminar todos antes de sus fechas límite

Restricciones

  • 1 ≤ deadline.length == profit.length ≤ 5000
  • 1 ≤ deadline[i] ≤ n, donde n es el número de trabajos
  • 1 ≤ profit[i] ≤ 105
  • Los arreglos no están ordenados. Varios trabajos pueden compartir una fecha límite o una ganancia.

Ejemplos

Entrada
deadline = [3, 1, 2, 3, 1]profit = [40, 35, 30, 25, 50]
Salida
120
Explicación
Solo cabe uno de los dos trabajos con plazo límite 1, así que ejecuta el que vale 50. El trabajo que vale 30 termina después en su plazo límite 2 y el trabajo que vale 40 en su plazo límite 3: 50 + 30 + 40 = 120.
challenge icon

Para ir más allá

¿Y si el trabajo i tarda duration[i] unidades de tiempo en lugar de una? ¿Sigue dando el mejor total tomar primero el trabajo más rentable?

Restablecer código
def jobSequencing(deadline, profit):
    # Escribe el código aquí

Prueba #1

Prueba #2

Prueba #3

Argumentos

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

Salida Esperada

120