2D Dynamic Programming & Knapsack

Advanced & DP

Grid optimization, 0/1 knapsack, and dual string alignments

562 problems·13 Easy·280 Medium·269 Hard
Pattern Study Guide & Cheat Sheet
▼

Solve problems with two independent dimensions (e.g. two strings, grid cells, or items vs capacity) by filling an M × N table where dp[i][j] transitions from adjacent predecessors.

Core Invariant: Table grid invariant: Every cell `dp[i][j]` is derived from `dp[i-1][j]` (delete/skip first), `dp[i][j-1]` (insert/skip second), or `dp[i-1][j-1]` (match/replace both). Base row `i=0` and col `j=0` define boundary conditions.

Recognize it (Keywords & Signals)
  • Compare two strings: Longest Common Subsequence, Edit Distance
  • Grid path counting / minimum path sum
  • 0/1 Knapsack problem (subset sum with capacity)
  • Distinct subsequences / interleaved strings
  • Palindromic substrings / longest palindromic subsequence
When NOT to use

Greedy works (e.g. Fractional Knapsack), or dimensions are sparse with massive bounds (use memoized recursion).

How to solve (Step-by-step)
  1. 1.Define `dp[i][j]`: e.g. LCS length of `text1[0..i-1]` and `text2[0..j-1]`.
  2. 2.Create table: `dp = [[0] * (n + 1) for _ in range(m + 1)]`.
  3. 3.Initialize base cases (row 0 and column 0).
  4. 4.Fill row by row: if characters match `text1[i-1] == text2[j-1]`, take diagonal `dp[i-1][j-1] + 1`; else take `max(dp[i-1][j], dp[i][j-1])`.
  5. 5.Return bottom-right cell `dp[m][n]`.
Watch for (Interview Traps)
  • Python list multiplication bug: `[[0] * n] * m` makes shallow copies of rows! Always use comprehension `[[0] * n for _ in range(m)]`
  • Mismatch between 1-based DP table indices `i, j` and 0-based string characters `s[i-1]`
  • Rolling array for Knapsack requires iterating capacity backwards to prevent reusing the same item
2D DP on Two Strings (Longest Common Subsequence)
def longest_common_subsequence(text1: str, text2: str) -> int:
    m, n = len(text1), len(text2)
    # dp[i][j] = LCS length between text1[:i] and text2[:j]
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if text1[i - 1] == text2[j - 1]:
                # Characters match: extend diagonal subsequence
                dp[i][j] = 1 + dp[i - 1][j - 1]
            else:
                # Discard either char from text1 or text2
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
                
    return dp[m][n]
Cost
O(m * n) quadratic cell visits · O(m * n) table, reducible to O(min(m, n)) rolling row (Can compress to 1D rolling array if only previous row is needed.)
Canonical problems
#1143 Longest Common Subsequence: Archetypal string comparison 2D table
#72 Edit Distance: Operations match insert (i, j-1), delete (i-1, j), replace (i-1, j-1)
#62 Unique Paths: Grid path sum: dp[r][c] = dp[r-1][c] + dp[r][c-1]
#516 Longest Palindromic Subsequence: LCS between string and its reverse, or interval 2D DP
Easy·103 companies·Max freq 100%·Acc 57.0%
Impact AnalyticsQualysTrexquant+100
Medium·89 companies·Max freq 100%·Acc 38.2%
PornhubNielsenMphasis+86
Hard·84 companies·Max freq 100%·Acc 67.7%
Publicis SapientC3.aiRakuten+81
Medium·69 companies·Max freq 100%·Acc 53.5%
UpstartTech MahindraSquarepoint Capital+66
Easy·44 companies·Max freq 100%·Acc 54.2%
HPEHSBCAdobe+41
Medium·44 companies·Max freq 100%·Acc 53.4%
FreechargeCiscoCARS24+41
Medium·39 companies·Max freq 100%·Acc 41.2%
TecholutionTomTomNike+36
Medium·34 companies·Max freq 100%·Acc 59.7%
SplunkSamsungPayPal+31
Medium·33 companies·Max freq 100%·Acc 0.4%
ZulilyPhonePeTomTom+30
Medium·30 companies·Max freq 100%·Acc 0.4%
GravitonOscar HealthNetApp+27
Hard·30 companies·Max freq 100%·Acc 42.5%
BaiduDoorDashWix+27
Medium·30 companies·Max freq 100%·Acc 71.3%
CTC Global Sdn BhdCareemToast+27
Medium·30 companies·Max freq 100%·Acc 50.6%
WiseOPPOGSA Capital+27
Medium·29 companies·Max freq 100%·Acc 73.0%
NetskopeCitadelPure Storage+26
Hard·29 companies·Max freq 100%·Acc 31.2%
NetskopeXX+26
Medium·28 companies·Max freq 100%·Acc 36.7%
DelhiveryLinkedInAdobe+25
Hard·27 companies·Max freq 100%·Acc 39.1%
NykaaNikeRoku+24
Medium·26 companies·Max freq 77%·Acc 60.9%
SwiggyZohoNeetCode 150+23
Medium·25 companies·Max freq 67%·Acc 67.0%
NeetCode 150NeetCode 150Blind 75+22
Hard·24 companies·Max freq 100%·Acc 60.9%
BaiduYugabyteZeta Global+21
Hard·24 companies·Max freq 100%·Acc 54.8%
Pony.aiPony.aiAirbnb+21
Medium·24 companies·Max freq 88%·Acc 59.3%
micro1OptumNeetCode 150+21
Medium·23 companies·Max freq 100%·Acc 42.2%
HTCMakeMyTripStripe+20
Medium·23 companies·Max freq 90%·Acc 57.4%
GrammarlyVerkadaZoho+20
Medium·23 companies·Max freq 78%·Acc 45.2%
DatabricksNeetCode 150NeetCode 150+20
Medium·21 companies·Max freq 100%·Acc 40.3%
PornhubAlibabaMotive+18
Hard·21 companies·Max freq 93%·Acc 0.6%
DoorDashWeRideDuolingo+18
Medium·20 companies·Max freq 100%·Acc 49.7%
ToyotaeBayDream11+17
Hard·20 companies·Max freq 100%·Acc 0.3%
XCyntexaX+17
Easy·19 companies·Max freq 100%·Acc 79.1%
Bank of AmericaXX+16
Hard·19 companies·Max freq 100%·Acc 63.9%
SamsungSnapSnap+16
Hard·19 companies·Max freq 100%·Acc 0.6%
XDropboxX+16
Hard·19 companies·Max freq 100%·Acc 38.0%
Argo AIVerilyMedia.net+16
Easy·18 companies·Max freq 100%·Acc 74.3%
HTCLTIMindtreeCognizant+15
Medium·18 companies·Max freq 100%·Acc 68.5%
SpaceXTexas InstrumentsGoldman Sachs+15
Medium·17 companies·Max freq 100%·Acc 63.3%
MolocoTwo SigmaVerily+14
Hard·17 companies·Max freq 100%·Acc 0.5%
GravitonDE ShawMathWorks+14
Easy·17 companies·Max freq 88%·Acc 49.2%
TinkoffFractal AnalyticsWix+14
Hard·17 companies·Max freq 83%·Acc 59.2%
WorldQuantZeta GlobalArcesium+14
Medium·16 companies·Max freq 100%·Acc 59.6%
PornhubMastercardNeetCode 150+13
Hard·16 companies·Max freq 100%·Acc 52.2%
SwiggyMeeshoNeetCode 150+13
Medium·16 companies·Max freq 69%·Acc 65.7%
MAQ SoftwareNutanixLinkedIn+13
Medium·15 companies·Max freq 88%·Acc 38.8%
ZS AssociatesAvitoSprinklr+12
Hard·15 companies·Max freq 82%·Acc 54.2%
TekionSnapSnap+12
Hard·14 companies·Max freq 100%·Acc 51.0%
Akuna CapitalTower Research CapitalDE Shaw+11
Medium·14 companies·Max freq 100%·Acc 54.4%
GravitonPhonePeDoorDash+11
Hard·14 companies·Max freq 100%·Acc 50.5%
PinterestZScalerVirtu Financial+11
Medium·14 companies·Max freq 100%·Acc 0.7%
RokuGrabZepto+11
Medium·14 companies·Max freq 100%·Acc 57.4%
Akuna CapitalMorgan StanleyWalmart Labs+11
Medium·14 companies·Max freq 100%·Acc 74.3%
scalerNeetCode 150NeetCode 150+11
50 displayed (of 50 matching)Filtered: All Companies

Top Companies Testing 2D Dynamic Programming & Knapsack

Browse company-specific interview problem lists and recency breakdowns:

Explore All 22 DSA Coding Patterns

Master core algorithmic patterns tested in FAANG & Big Tech coding interviews.

Patterns Hub

2D Dynamic Programming & Knapsack frequently asked questions

What is the 2D Dynamic Programming & Knapsack pattern in coding interviews?

Grid optimization, 0/1 knapsack, and dual string alignments It is categorized under Advanced & DP and features 562 curated interview problems across Easy (13), Medium (280), and Hard (269) difficulties.

Which tech companies frequently test 2D Dynamic Programming & Knapsack?

Companies frequently asking 2D Dynamic Programming & Knapsack questions include Google, Amazon, Microsoft, Meta, Bloomberg, Infosys.

How do I master the 2D Dynamic Programming & Knapsack pattern?

Start by studying the algorithmic strategy and template code, then practice Easy and Medium problems before attempting Hard problems under timed conditions.