A simple example for someone who wants to understand Dynamic Programming
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
Dynamic Programming (DP) is a powerful technique used to solve complex problems by breaking them down into simpler subproblems. It's especially useful in cases where the problem can be divided into stages with overlapping subproblems. DP typically involves two key strategies: memoization and tabulation.
What is Dynamic Programming?
At its core, dynamic programming is an optimization method used to solve problems by storing results of expensive function calls and reusing them when the same inputs occur again. The method works by solving each subproblem just once and storing the results to avoid the computational cost of solving the same problem multiple times.
DP is generally applied to problems that can be categorized into overlapping subproblems and optimal substructure:
- Overlapping Subproblems: This property means that the problem can be broken down into subproblems which are reused several times. This is what differentiates DP from other divide and conquer methods, which do not have this property.
- Optimal Substructure: This property means the solution to the problem can be constructed efficiently from solutions to its subproblems. In other words, the problem's solution can be derived from the solutions to its smaller subproblems.
Technical Explanation
To give a technical explanation, let's consider a classic example: the Fibonacci sequence, where each number is the sum of the two preceding ones, starting from 0 and 1. The direct recursive solution for Fibonacci numbers is inefficient due to redundant calculations. This is where dynamic programming shines.
Recursive Solution
- Knapsack Problem: Finding the most valuable set of items to fit in a knapsack of fixed capacity.
- Shortest Path Problem: Algorithms like Dijkstra's and Bellman-Ford use DP concepts to find shortest paths in graphs.
- Longest Common Subsequence: Used in bioinformatics for DNA sequence comparison.
- Matrix Chain Multiplication: Used to find the most efficient way to multiply a given sequence of matrices.
- Stock Buy-Sell Problems: Optimizing profit from buying and selling stocks over multiple days.
Related reading
- A simple example of a cache aware algorithm?
- A simple explanation of Naive Bayes Classification
- A simple explanation of Random Forest
- A star algorithm Distance heuristics
- A star algorithm using Heuristic value to act as Tie-breaker where nodes have identical F-values
- A two way minimum spanning tree of a directed graph
- A weighted version of random.choice
- About accuracy in recommendation system

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.