Define Dynamic Programming
Dynamic programming is a method for solving problems with overlapping problems. Typically, these sub problems arise from a recurrence relating a solution to a given problem with solutions to its smaller sub problems of the similar type. Rather than solving overlapping subproblems again and again, dynamic programming suggests solving every of the smaller sub problems only once and recording the results in a table from which we can then get a solution to the original problem.