Beginner Friendly Series on Dynamic Programming

Правка en7, от kartik8800, 2021-01-07 13:59:52

This series of videos are focused on explaining dynamic programming by illustrating the application of DP through the use of selected problems from platforms like Codeforces, Codechef, SPOJ, CSES and Atcoder.

After going through this series, you should find yourself confident in approaching dynamic programming problems and also implementing them in a reasonable amount of time.

I will also live code and submit the solutions to the problem on the coding platform from where the problem comes.

# Some Basic elements of Dynamic Programming

Part 1: https://youtu.be/24hk2qW_BCU
1. What is Divide and Conquer?
2. What is Dynamic Programming?
3. Types of DP problems.

Part 2: https://youtu.be/yfgKw6BUZUk
1. What is a DP-state?
2. Characterizing a DP-state.
3. What is a recurrence?
4. Top Down v/s Bottom Up.

Part 3: https://youtu.be/X-3HklSPx6k
1. Directed Acyclic Graph(DAG) Representation of DP solution
2. Visualizing Top-Down and Bottom-Up.
3. Evaluation order for bottom-up codes.
4. Analyzing the space and time complexity for a DP solution(derivation).

## Problem 1: Dice Combinations

Source: CSES
Explanation: https://youtu.be/5gd5jptXWAM

## Problem 2: Coin Combinations I

Source: CSES
Explanation: https://youtu.be/5BdAl6gfusg

## Problem 3: Coin Combinations II

Source: CSES
Explanation: https://youtu.be/-pXjopzMVrE

## Problem 4: Removing Digits

Source: CSES
Explanation: https://youtu.be/32qvB7OP4V8

## Problem 5: Grid Paths

Source: CSES
Explanation: https://youtu.be/V64F4wlodUM

## Problem 6: Book Shop

Source: CSES
Explanation: https://youtu.be/qpNy2nuSuaI

## Problem 7: Array Description

Source: CSES
Explanation: https://youtu.be/d1H5JylYG4I

## Problem 8: Edit Distance

Source: CSES
Explanation: https://youtu.be/Ev80c1oIRFg

## Problem 9: Rectangle Cutting

Source: CSES
Explanation: https://youtu.be/LdynQjWsO5Q

## Problem 10: Two Sets II

Source: CSES
Explanation: https://youtu.be/TOsD3BkIKoQ

## Problem 11: Beautiful Array

Source: Codeforces
Explanation: https://youtu.be/IgBLv32QFoQ

## Problem 12: Number of Valid Arrays

Source: Coding Interview

## Problem 13: Longest Increasing Subsequence O(NlogN)

Source: CSES
Proof and optimization to NlogN: https://youtu.be/66w10xKzbRM
Implementation of the algorithm: https://youtu.be/wqLwv7E1GF0

## Problem 14: Projects

Source: CSES
Solution Approach: https://youtu.be/MJn3ogwsUbo
Implementation of the algorithm: https://youtu.be/ISuIwMnSyXc

## Problem 15: Beauty of Tree

Source: Kick Start
Explanation: https://youtu.be/ueLRceYVcdE

## Problem 16: Catch Some

Source: Kick Start
Explanation: https://youtu.be/ljLIrNKLANE

## Problem 17: Vasya and Binary Strings

Source: Codeforces (rated:2400)
Explanation: https://youtu.be/NINZAQFW_AE

## Problem 18: Counting Towers

Source: CSES 2021 problem
Explanation: https://youtu.be/pMEYMYTX-r0

I am quite confident that many beginners/intermediates will definitely enjoy watching this series on dynamic programming and it will definitely help in getting better at dynamic programming and problem solving in general. I have tried to teach in a way such that not many prior prerequisites are required to understand the explanations even to the harder problems.

If people find this helpful then I will make sure that this list of problems will keep growing, cheers!

Link for introduction to DP on Trees: https://codeforces.com/blog/entry/79857

UPD: Added 2 more problems from CSES: Projects and Removing digits.
UPD: Added 3 parts on basic elements of DP to get you started.

UPD: I have also started a series on DP with bitmasking(starting from the very basics) and in the future will make a separate blog for both Digit DP series and DP with bitmasking series, till then interested people can check: Dynamic Programming with bitmasking
UPD: added solution to problem Vasya and Binary Strings
UPD: added solution to problem Counting towers from CSES

#### История

Правки

Rev. Язык Кто Когда Δ Комментарий
en7 kartik8800 2021-01-07 13:59:52 332
en6 kartik8800 2020-12-12 17:47:12 370 Tiny change: 'odeforces -> rated:2400<br>\nProb' -> 'odeforces (rated:2400)<br>\nProb'
en5 kartik8800 2020-07-25 01:19:16 485
en4 kartik8800 2020-07-17 11:12:47 939 Tiny change: 'rivation).\n\n\nProb' -> 'rivation).<br>\n\n\nProb'
en3 kartik8800 2020-07-15 22:39:12 591
en2 kartik8800 2020-07-14 03:29:12 657
en1 kartik8800 2020-07-13 02:02:50 3612 Initial revision (published)