https://github.com/rudrakshi99/dynamic_programming
A collection of dynamic programming problems implemented in C++.
https://github.com/rudrakshi99/dynamic_programming
algorithms competitive-programming cpp dynamic-programming
Last synced: about 2 months ago
JSON representation
A collection of dynamic programming problems implemented in C++.
- Host: GitHub
- URL: https://github.com/rudrakshi99/dynamic_programming
- Owner: rudrakshi99
- Created: 2020-08-05T11:52:23.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-09-17T12:46:25.000Z (over 4 years ago)
- Last Synced: 2025-01-22T18:53:25.964Z (4 months ago)
- Topics: algorithms, competitive-programming, cpp, dynamic-programming
- Language: C++
- Homepage:
- Size: 3.09 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Dynamic Programming
**“Those who cannot remember the past are condemned to repeat it ⏳⌛.”**
Dynamic Programing is all about remembering answers to the subproblems you’ve already solved and not solving it again.
## Where do we need Dynamic Programming?
* If you are given a problem, which can be broken down into smaller sub-problems.
* These smaller sub-problems can still be broken into smaller ones - and if you manage to find out that there are some overlappping sub-problems.
* Then you’ve encountered a DP problem.**The core idea of Dynamic Programming is to avoid repeated work by remembering partial results.**
## Dynamic Programming and Recursion:
**Dynamic programming is basically, recursion plus memoization....**
* Recursion allows you to express the value of a function in terms of other values of that function.
* If you implement your function in a way that the recursive calls are done in advance, and stored for easy access, it will make your program faster.
* This is what we call Memoization - it is memorizing the results of some specific states, which can then be later accessed to solve other sub-problems.The intuition behind dynamic programming is that we trade space for time, i.e. to say that instead of calculating all the states taking a lot of time but no space, we take up space to store the results of all the subproblems to save time later.
## Optimization Problems
Dynamic Programming is typically applied to optimization problems. In such problems there can be many possible solutions. Each solution has a value, and we wish to find a solution with the optimal (minimum or maximum) value. We call such a solution an optimal solution to the
problem. If same suproblems are called again and again, that problem has **Overlapping Subprolems property**. Like other typical Dynamic Programming(DP) problems, recomputations of same subproblems can
be avoided by constructinng a temporary array dp[] and memoizing the computed values in this array.## Dynamic Programming Solution
1. **Top Down DP**- In Top Down, you start building the big solution right away by explaining how you build it from smaller solutions.
2. **Bottom Up DP**- In Bottom Up, you start with the small solutions and then use these small solutions to build up larger solutions.