Problema
Ver original (inglés)Cada proyecto se representa como [start_day, end_day, reward]. Ocupa todos los días desde start_day hasta end_day, incluyendo ambos extremos. Solo puedes participar en un proyecto por día. Elige un subconjunto con la mayor recompensa total. Un proyecto que comienza el mismo día que termina otro entra en conflicto con él.
Implementa project_rewards(projects).
Entrada
projects: Filas de tres enteros: día de inicio, día de fin y recompensa.
Salida
Devuelve la recompensa total máxima; no es necesario devolver los proyectos elegidos.
Restricciones
1 ≤ projects ≤ 200,000. 1 ≤ start_day ≤ end_day ≤ 1,000,000,000. Las recompensas son enteros positivos de como máximo 1,000,000,000.
Ejemplos
Entrada:
projects = [
[1, 2, 4],
[3, 4, 5],
[2, 3, 10]
]
Salida esperada:
expected = 10
Entrada:
std::vector<std::vector<long long>> projects = {
{1, 2, 4},
{3, 4, 5},
{2, 3, 10}
};
Salida esperada:
long long expected = 10;
Entrada:
long[][] projects = new long[][] {
new long[] {1, 2, 4},
new long[] {3, 4, 5},
new long[] {2, 3, 10}
};
Salida esperada:
long expected = 10;
Explicación
Los dos primeros proyectos suman 9 juntos. El último da 10 y entra en conflicto con ambos, así que se elige solo a él.
Entrada:
projects = [
[1, 2, 4],
[2, 3, 5]
]
Salida esperada:
expected = 5
Entrada:
std::vector<std::vector<long long>> projects = {
{1, 2, 4},
{2, 3, 5}
};
Salida esperada:
long long expected = 5;
Entrada:
long[][] projects = new long[][] {
new long[] {1, 2, 4},
new long[] {2, 3, 5}
};
Salida esperada:
long expected = 5;
Explicación
Ambos ocupan el día 2. Solo se elige el segundo, con recompensa 5.
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.