Cómo practicar efectivamente la programación dinámica para mejorar mis habilidades, es decir, qué problemas debo resolver primero antes de intentar resolver problemas de DP de jueces en línea como CodeChef, Topcoder,

Para la programación dinámica

Pase unos meses leyendo capítulos de PD de CLRS, manuales de diseño de algoritmos. Y también lea y entienda los tutoriales de codificador superior aquí.

Luego practica un problema en cada subcategoría,

  1. DP + Árbol
  2. Máscaras de bits DP +
  3. Gráficos DP +
  4. DP + Teoría de números
  5. DP + Hashing
  6. Árboles de sufijo DP +
  7. DP + Geometría
  8. Probabilidades de DP +
  9. Combinatoria DP +

En general

  1. No te compares con los mejores programadores.

Disfruta y ponte cómodo con los algoritmos, la codificación, etc. Evite compararse con los mejores programadores, esto podría provocar un estrés por no poder realizar a la par con ellos y podría comenzar a odiar la programación.

** La lucha prematura en el campo de batalla podría terminar lastimándote. Tómate tiempo para afilar tu espada, aprendiendo una buena táctica. **

  1. Aprende lento y fácil

Aprender rápido, codificar rápido no será beneficioso para usted. Pero aprender lento promueve el aprendizaje profundo.

** Asegúrate de pasar unos días para cada problema al principio **

2. ¿ Aprender algo de cada problema?

Se siente tan bien ver su código compilando, ejecutando y produciendo los resultados esperados. No olvides ese problema desde ese momento, pero asegúrate de que lo entiendes.

  • ¿En qué se diferencia cada problema de otros problemas que ha encontrado?
  • ¿Qué aprendiste al resolver un nuevo problema?

** No resuelva los problemas por el bien de mejorar sus puntajes o clasificaciones del Juez en línea de Esfera (SPOJ) . Es una pérdida de tiempo de corte. **

3. Haz preguntas y genera nuevos problemas.

Haga muchas preguntas sobre el problema. No tomes nada por sentado. Modifique la descripción del problema, cree nuevos problemas e intente resolverlos también.

Por ejemplo.

alternativas al problema Subarray de suma máxima: Subarreglo de suma mínima, Subarreglo de producto máximo, Subarreglo de producto mínimo, etc.

** Recuerda que en el mundo real, serás probado en problemas invisibles. **

5. Conocer múltiples soluciones para un problema.

Conozca múltiples soluciones para un problema desde el peor tiempo de ejecución hasta el mejor, desde el peor espacio hasta la mejor utilización del espacio. Comprender los pros y los contras de cada solución.

6. Visualiza la solución.

Agregue un montón de printf en su solución y visualice cada paso de la solución.

vea esta respuesta: la respuesta de Jayaprakash Sundararaj a ¿Cómo visualizará la recursión en general y en estructuras de datos como los árboles?

Comience con la lectura del tutorial de codificador superior en DP. Resuelva problemas relacionados con problemas clásicos de DP, como cambio de moneda, LIS, LCS, etc. Puede encontrarlos categorizados aquí (primero deberá crear un ID de UVa OJ). Después de aprender un algoritmo, intente resolver TODOS los problemas relacionados con eso.

Después de adquirir algo de experiencia y confianza, comience a resolver los problemas de DP en Topcoder, es el mejor sitio para aprender DP, pero no para principiantes. Lea sus tutoriales si no puede encontrar una solución para un problema.

Puedes leer mi respuesta a casi la misma pregunta aquí.
La respuesta de Arpit Kathuria a ¿Cómo puedo ser perfecta en la programación dinámica? ¿Cómo debo practicar?
Como usted es un principiante en programación, no comience a leer algoritmos de CLRS. Comience con un libro fácil como “manual de diseño de algoritmos de Skiena” o “estructuras de datos y algoritmos simplificados” y luego continúe con CLRS después de 3-5 meses.

Echa un vistazo a Problemset – Codeforces. Este enlace lo lleva directamente a la categoría “Programación dinámica”, ordenada por el problema más sencillo primero. Desde allí, puede utilizar la búsqueda binaria para encontrar un nivel de dificultad que pueda afrontar cómodamente (¡pero no demasiado!).

¡Que te diviertas!