Introduction
Welcome to The Dynamic Programming Workbook. The purpose of this book is to collect disparate resources on the internet and in printed materials and present it in a way that will allow readers to learn1 how to solve dynamic programming problems and check their work without having to search around or seek help on forums and such.
Motivation
Problems that require, or are easily solved by, dynamic programming tend to be difficult. There are many reasons why this could be so. My personal experience has been that unless you know to use dynamic programming from the outset, the realization to utilize the strategy does not come easy. It is entirely possible to take an approach that will not necessarily illuminate the presence of either optimal substructure2 or overlapping subproblems3.
What this book is not
This book is not meant to teach data structure and algorithm fundamentals. While relevant concepts will be discussed, there will be lots of insights and connections to other areas of computer science that will not be covered. These would be best learned from a textbook.
Language
I have chosen to use Python for any code snippets due to how easy it is to read, as well as its expressiveness. With that said, I will try to make an effort to keep things readable for a wide audience by documenting when a Python idiom or feature is used.
Textbooks
Put links to textbooks here
Hopefully, the experience should be similar to that described by the Moore method
When an optimal solution can be assembled from optimal solutions of subproblems
When a subproblem is solved more than once, instead of generating only new subproblems