1 Identify if it is a DP problem?
from url: geeksforgeeks.org/overlapping-subproblems-property-in-dynamic-programming-dp-1
1.1 Overlapping Subproblems
DP is manily used when solutions of same subproblems are needed again and again. In DP, computed solutions to subproblems are stored in a table so that these don’t have to be recmoputed.
There are two ways to store the values: Memorization (Top Down) and Tabulation (Bottom Up)
- Memorization (Top Down)
This is similar to the recursive version with a small modification that it looks into a lookup table before computing solutions. We initialize a lookup array with all initial values as NIL. Whenever we need the solution to a subproblem, we first look into the NIL. If the precomputed value is in the NIL then we return that value, otherwise we compute the value and put the result in the NIL so that it can be reused later.
Following is a memorized version for nth Fibonacci Number.
"use strict";
let MAX = 100;
let NIL = -1;
let lookup = new Array(MAX);
function _initialize()
{
for (let i =0; i < MAX; i++)
lookup[i] = NIL;
}
function fib(n)
{
if (lookup[n] == NIL)
{
if (n <= 1)
lookup[n] = n