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á:
- Cómo escribir un algoritmo para un programa complicado que tiene muchos bucles, conmutadores y otros procesos dentro de una instrucción if
- ¿Qué hace que NP-hard sea más difícil?
- ¿Cuál es la diferencia entre la función de aptitud del algoritmo genético y la función de pérdida del descenso de gradiente?
- ¿Cuál es la mejor forma / algoritmo para detectar un patrón en una serie de tiempo?
- ¿Cuántas conjeturas necesitarías para determinar el número entre 1 y 100 en el peor de los casos usando una búsqueda lineal?
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!