dynamic-programming
Runnable companion for the ankurm.com article Dynamic Programming in Java for Beginners: Memoization vs Tabulation (10 Classic Problems).
Ten classic problems, each solved top-down (memoization), bottom-up (tabulation) and with a space-optimised
table. Tests cross-check every variant on random inputs, and write the transcripts the article quotes.
There is no docs/ folder on purpose: the explanations live in the article.
| Component | Version | Verified against |
|---|---|---|
| JDK | 25.0.5+8 (Temurin, LTS) | java -version |
| JUnit | 6.1.3 | maven-metadata.xml on Maven Central (latest = release) |
| Maven | 3.9.11 | mvn -version |
export JAVA_HOME=/path/to/jdk-25 && export PATH="$JAVA_HOME/bin:$PATH"
cd dynamic-programming
mvn test # 11 tests; rewrites output/01-11
./scripts/run-all.sh # also regenerates output/12 (SpaceDemo under a 48 MB heap)
./scripts/make-single-file.sh # builds DynamicProgrammingTenProblems.java: java DynamicProgrammingTenProblems.java
| # | Problem | Source |
|---|---|---|
| 1 | Fibonacci | Fibonacci |
| 2 | Climbing Stairs | ClimbingStairs |
| 3 | House Robber | HouseRobber |
| 4 | Coin Change (fewest coins, and number of ways) | CoinChange |
| 5 | Longest Increasing Subsequence | LongestIncreasingSubsequence |
| 6 | 0/1 Knapsack | Knapsack01 |
| 7 | Longest Common Subsequence | Lcs |
| 8 | Edit Distance | EditDistance |
| 9 | Unique Paths | UniquePaths |
| 10 | Partition Equal Subset Sum | PartitionEqualSubsetSum |
Captured output is in output/: 01 Fibonacci call counts, 02 Fibonacci pitfalls (computeIfAbsent, long overflow,
stack depth), 03-10 one dry run per problem, 11 the cross-check summary, 12 the heap-limited space demo.