Introduction to Dynamic Programming
Recursion and Memoization Fundamentals
Tabulation: The Bottom-Up Approach
DP Problem-Solving Framework
Classic DP Problem: Fibonacci Sequence
Knapsack Problem: 0/1 Knapsack
Knapsack Problem: Unbounded Knapsack
Coin Change Problem: Minimum Coins
Coin Change Problem: Number of Ways
Longest Common Subsequence (LCS)
Matrix Chain Multiplication
DP and Graph Algorithms: Shortest Paths
DP for String Manipulation: Subsequence Problems
Longest Increasing Subsequence (LIS)
Longest Palindromic Subsequence (LPS)
DP for String Manipulation: Substring Problems
DP for String Manipulation: Palindrome Problems
Longest Palindromic Substring
Time and Space Complexity Analysis of DP Solutions
Optimization Techniques: Rolling Arrays
Optimization Techniques: State Compression
Advanced DP Problems: Bitmasking
Traveling Salesman Problem (TSP) with Bitmasking
Advanced DP Problems: Tree DP
Maximum Independent Set in a Tree
Advanced DP Problems: Digit DP
Counting Numbers with Specific Properties using Digit DP
DP Problem Identification and Formulation: Practice
Solving New DP Problems: A Systematic Approach
Real-World Applications of Dynamic Programming
DP and Combinatorial Optimization
Advanced Data Structures for DP Optimization
Binary Indexed Trees (Fenwick Trees)
Practice Problems: Easy DP Problems
Practice Problems: Medium DP Problems
Practice Problems: Hard DP Problems
Preparing for FAANG Interviews: DP Questions
Mock Interviews: DP Focus
Conclusion: Mastering Dynamic Programming