The main objective of this course is to provide the mathematical rigor behind one of the methods most used to solve dynamic problems in economics: dynamic programming. This course is divided into two modules: the first one develops the mathematical elements that support dynamic programming, and the technique is explained in depth. In the second module this method is applied to growth and economic cycle models. In addition, in the latter module simulations of such models are performed in Matlab. These two modules seek a comprehensive understanding of dynamic programming, from its mathematical foundation to model simulation.