From Length to Sequences: Backtracking Through the LCS Table
Finding the LCS length was one thing. But what if the question asks for ALL possible longest subsequences? That's where backtracking enters the picture.
Algorithm problems and solutions
View All TagsFinding the LCS length was one thing. But what if the question asks for ALL possible longest subsequences? That's where backtracking enters the picture.
I thought I had DP figured out. I'd solved house robber with that sweet max(rob_this_house + dp[i-2], skip_this_house) logic. I'd reversed linked lists by imagining "the rest is already solved." But when I faced Longest Common Subsequence, all my mental models fell apart.
No decision tree. No "imagine the rest" logic. No clever way to use previous answers. Just... confusion.
Here's how I finally cracked it.
A conversation about solving the Lowest Common Ancestor problem that reveals one of the most elegant patterns in tree recursion—using return values to communicate information upward through the call stack.
A conversation about solving the Minimum Coin Combination problem that reveals why greedy algorithms sometimes fail—and how recognizing overlapping subproblems is the foundation of dynamic programming thinking.
A conversation about solving the LRU Cache problem that reveals one of the most elegant hybrid data structure designs—and why sometimes the "crazy" idea of combining two data structures is actually brilliant.
A conversation about solving the Widest Binary Tree Level problem that reveals how mathematical position formulas and DFS traversal create an elegant solution—and why we need to track both min and max positions at each level.
A conversation about solving the Subarray Sum Equals K problem that reveals how cumulative sums and hashmaps create an elegant O(n) solution—and why we need that mysterious map.put(0, 1) initialization.
A conversation between two engineers about the Range Sum Query problem that reveals why some algorithmic techniques exist—and when they actually matter.
Want to truly understand dynamic programming? This isn't just another tutorial with code solutions. We'll explore why these algorithms work, how they connect to other problems, and when to apply them. By the end, you'll think like a DP expert.
A dialogue between Professor Chen and Alex, a senior Computer Science student, as they unravel why some DP problems resist the standard recursive → memoization → tabulation pipeline.
Alex: [walks into office hours with laptop open] Professor Chen, I'm really confused about this LeetCode problem I'm working on. I thought I understood DP, but something's not clicking.
Professor Chen: Let's see what you've got. Walk me through it.
Alex: It's LC 740: Delete and Earn. Here's the problem: