technical implementation let' dig into the implementation of some of the theoretical programming techniques that we discussed previously in this we will start with dynamic programming dynamic programming as we have already describedin this approachwe divide problem into smaller subproblems in finding the solutions to the subprogramscare is taken not to recompute any of the previously encountered subproblems this sounds bit like recursionbut things are little broader here problem may lend itself to being solved by using dynamic programming but will not necessarily take the form of making recursive calls property of problem that will make it an ideal candidate for being solved with dynamic programming is that it should have an overlapping set of subproblems once we realize that the form of subproblems has repeated itself during computationwe need not compute it again insteadwe return the result of pre-computed value of that subproblem previously encountered to avoid situation where we never have to re-evaluate subproblemwe need an efficient way in which we can store the results of each subproblem the following two techniques are readily available memoization this technique starts from the initial problem set and divides it into small subproblems after the solution to subprogram has been determinedwe store the result to that particular subproblem in the futurewhen this subproblem is encounteredwe only return its pre-computed result tabulation in tabulationwe settle on an approach where we fill table of solutions to subproblems and then combine them to solve bigger problems