¿Cómo obtenemos ideas para resolver preguntas de programación dinámica?

Aquí está la estrategia que me parece bastante obvia: practicando mucho la programación dinámica . Funciona más o menos de la misma manera en cualquier actividad: está mejorando al practicarlo y puede mejorar de manera más efectiva al practicar de manera más inteligente.

Simplemente resuelva muchos de estos problemas; puede elegir problemas marcados como DP en SPOJ o Timus, o simplemente usar Codeforces / TopCoder para tener acceso fácil a todos los códigos y editoriales, o tomar cualquier otro OJ que desee.

Siga leyendo las soluciones de otras personas, así como los editoriales proporcionados, incluso si tiene una solución que funcione.

Básicamente, necesita dos cosas: el conocimiento de varios conceptos / técnicas clásicas (es posible obtener la optimización de Knuth usted mismo, pero simplemente aprenderlo parece una mejor idea) y la capacidad de usar estas cosas de manera adecuada. Si está buscando algún consejo mágico como todo ese “primer paso: resolver subproblemas; segundo paso: construir una recurrencia; tercer paso: resolver el problema “ cosas que puedes encontrar en los artículos ” aprender programación dinámica en 20 minutos “- No voy a ponerlo aquí. Creo que simplemente no funciona de esta manera; o tal vez soy demasiado estúpido para eso, al menos sé con certeza que no funcionó en mi caso. La práctica es lo que funcionó, y lo que realmente sigue funcionando, ya que todavía estoy aprendiendo cosas nuevas de DP constantemente. Volviendo a dos cosas que necesita: la capacidad de usar las ideas de manera adecuada se trata de práctica, y el conocimiento de ideas / trucos probablemente se puede obtener solo leyendo libros / tutoriales, pero de todos modos lo haré parte de la práctica.