1D Dynamic Programming — Master Recap & Cheatsheet

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

1D DP Master Cheatsheet


Pattern Reference

PatternTransitionExample
Fibonaccidp[i] = dp[i-1] + dp[i-2]Climbing Stairs
House Robberdp[i] = max(dp[i-1], dp[i-2]+nums[i])House Robber
Kadanecurr = max(x, curr+x)Max Subarray
Unbounded Knapsackdp[i] += dp[i-c] (fwd)Coin Change II
0/1 Knapsackdp[j] = max/or dp[j-w] (bwd)Partition Equal Sum
LIS O(n log n)bisect_left + extend/replaceLIS
Decode Waysdp[i] += dp[i-1] + dp[i-2] (conditional)Decode Ways
Jump Gamereach = max(reach, i+nums[i])Jump Game

Key Insights

Knapsack Loop Direction:

  • 0/1 (each item once): loop amounts backwardsfor j in range(target, w-1, -1)
  • Unbounded (item reusable): loop amounts forwardsfor j in range(w, target+1)
  • Count combinations: coins outer, amounts inner
  • Count permutations: amounts outer, coins inner

LIS Patience Sort:

  • tails[i] = smallest tail of length-(i+1) subsequences
  • bisect_left = position where new element goes
  • Length of tails = LIS length

Kadane Extensions:

  • Product: track min AND max (negatives can flip)
  • Circular: max(normal, total - min_subarray)

Complexity Summary

AlgorithmTimeSpace
Fibonacci-typeO(n)O(1)
KadaneO(n)O(1)
Coin ChangeO(n*amount)O(amount)
0/1 KnapsackO(n*W)O(W)
LIS (n²)O(n²)O(n)
LIS (patience)O(n log n)O(n)
Word BreakO(n² * m)O(n)

Problem Index

Fibonacci: Climbing Stairs (01), Min Cost (02), Tribonacci (04)

House Robber: House Robber (03), Circular (04), Delete & Earn (05)

Kadane: Max Subarray (06), Max Product (07)

Unbounded Knapsack: Coin Change (08), Coin Change II (09), Perfect Squares (10)

Greedy: Jump Game (11), Jump Game II (12)

Counting DP: Decode Ways (13), Word Break (14), Target Sum (20)

LIS: LIS (15), Russian Doll Envelopes (16)

Palindrome: Palindromic Substrings (17), Longest Palindromic Subsequence (18)

0/1 Knapsack: Partition Equal Sum (19), Target Sum (20)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro