¿Hay un problema DP estándar similar a SPOJ Farida?

Sí, Farida es similar a un problema estándar llamado Problema de mochila 0-1.
De hecho, Farida es una versión más fácil. Después de resolver Farida, le sugiero que pruebe SPOJ.com – Problema RPLB

Puede encontrar información sobre el problema de la mochila aquí: Programación dinámica | Conjunto 10 (problema de mochila 0-1) – GeeksforGeeks


De todos modos, el enfoque dp para este problema será:

Aquí, [math] dp [i] [/ math] tiene la cantidad óptima de monedas de oro que puede llevar después de llegar al monstruo [math] i [/ math]. [math] wt [i] [/ math] contiene el número de monedas de oro con el monstruo [math] i [/ math].

Para la solución óptima, considere tres casos:

1. Caso base: para monstruos [matemática] 0 [/ matemática], no puede elegir ninguna moneda de oro. Por lo tanto, [matemáticas] ans = 0 [/ matemáticas].

2. Otro caso base: para el monstruo [matemático] 1 [/ matemático], tendrá que elegir el único monstruo para la cantidad máxima de monedas. Por lo tanto, [math] ans = [/ math] número de monedas con el primer monstruo.

3. Caso general: Aquí tendrá que elegir el máximo de dos opciones:
a) tomar monedas del monstruo [math] i [/ math]:
[math] ans = [/ math] monedas de [math] i [/ math] monster [math] + [/ math] solución óptima hasta [math] i-2 [/ math] monster
b) no tome monedas del monstruo [math] i [/ math]
[matemática] ans = [/ matemática] solución óptima hasta [matemática] i-1 [/ matemática] monstruo


memset (dp, 0, sizeof (dp)); // opt1
para (int i = 1; i <= monstruos; i ++)
{
if (i == 1) dp [i] = wt [i]; // opt2
sino dp [i] = max (wt [i] + dp [i-2], dp [i-1]); // opt3
}


Además, puede encontrar casos de prueba para este problema en SPOJ Toolkit: Code Test – FARIDA. Esto ayudará a verificar su código antes de enviarlo.

¡Espero que esto ayude!

Las preguntas son las mismas que la suma máxima del problema en una matriz cuando no hay dos elementos adyacentes que se puedan resolver a través de dp de esta manera:

dp [i] = suma máxima cuando no hay dos elementos adyacentes en el subarreglo a [1..i]
Por lo tanto, dp [i] = max (dp [i-1], dp [i-2] + a [i]);
es decir, el máximo de las situaciones en las que incluimos el elemento i o lo excluimos.

Este problema también puede resolverse sin espacio adicional, sin embargo, la lógica sigue siendo la misma.