La solución más simple: –
Complejidad del tiempo: O (n * n).
Complejidad espacial: O (n).
La solución es espacio optimizado.
/ * Enviado por: – Waqas Hamid * /
/ * Codechef Nick: principiante007 * /
/ * Leetcode Nick: beginner007 * /
/ * Nick del codificador superior: principiante007 * /
/ * Codeforces Nick: principiante7 * /
#include
#define LL long long int
#define s (a) scanf (“% d”, y a)
#define sl (a) scanf (“% lld”, & a)
#define ss (a) scanf (“% s”, a)
#define w (t) while (t–)
#define f (i, n) para (i = 0; i <n; i ++)
#define fd (i, n) para (i = n-1; i> = 0; i–)
#define p (a) printf (“% d”, a)
#define pl (a) printf (“% lld”, a)
#define ps (a) printf (“% s”, a)
#define pc (a) printf (“% c”, a)
#define ent printf (“\ n”)
#define mod 1000000007
#define PI 3.14159265
#define gs getline (cin, s)
#define pb push_back
#define mp make_pair
#define INF 1e18
- ¿Cuáles son los mejores libros sobre algoritmos que usan C ++?
- ¿Cuál sería el mejor enfoque para encontrar la distancia entre dos nodos de un árbol?
- ¿Existe un algoritmo existente para la siguiente pregunta? Si no, ¿cuál es la respuesta?
- ¿La programación competitiva se volverá aún más difícil?
- ¿Cómo Thomas Cormen y sus coautores generaron el índice para su libro clásico de algoritmos?
usando el espacio de nombres estándar;
trabajo de estructura
{
LL inicio, fin, beneficio;
};
LL compf (trabajo a, trabajo b)
{
volver a.finish <b.finish;
}
trabajo arr [1000005];
LL dp [1000005];
int main ()
{
LL n, i, j, t;
sl (t);
mientras que (t–)
{
sl (n);
aleta)
{
sl (arr [i] .start);
sl (arr [i] .finish);
arr [i] .finish + = arr [i] .start;
sl (arr [i] .profit);
}
sort (arr, arr + n, compf);
aleta)
dp [i] = arr [i] .profit;
para (i = 1; i <n; i ++)
{
para (j = 0; j <i; j ++)
{
if (arr [j] .finish <= arr [i] .start)
dp [i] = max (dp [i], dp [j] + arr [i] .profit);
más
descanso;
}
}
LL mx = -INF;
aleta)
si (dp [i]> mx)
mx = dp [i];
cout << mx << endl;
}
}