What Is Dynamic Programming and How To Use It