Dynamic programming approach is similar to divide and conquer in breaking down the problem into smaller and yet smaller possible sub-problems. But unlike, divide and conquer, these sub-problems are not solved independently. Rather, results of these smaller sub-problems are remembered and used for similar or overlapping sub-problems.
*The problem should be able to be divided into smaller overlapping sub-problem.
*An optimum solution can be achieved by using an optimum solution of smaller sub-problems.
*Dynamic algorithms use Memoization.