Dynamic programming (DP) is an algorithmic technique that involves breaking down a complex problem into smaller sub-problems and finding optimal solutions.
The foundation of DP is trust, where sub-problems trust the solutions of the smaller sub-problems that make up the larger problem.
An example of DP is constructing a large perfect square by joining smaller squares, relying on the optimality of the smaller squares.
In the Fibonacci sequence, each number relies on the optimal solutions of the two previous numbers.