Dynamic programming, or DP, is a topic in data structures and algorithms used for solving optimization problems by breaking a problem into smaller subproblems. Each of the problems gets solved just once; the solutions then get stored to avoid repetitive computations. Programmers should understand how to solve DP problems and apply that knowledge when building efficient DP algorithms. Taking a course focused on DP problems offers a practical way to acquire complete DP understanding and tricks. Most of the dynamic programming problems share some common elements; understanding how to identify those elements will further enhance your ability to develop new and more efficient algorithms.