Dynamic programming basically approach it's similar to divide and also conquer in breaking down the problem into smaller and also 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.