Dynamic Programming Algorithms (WIP)

Dynamic programming is a method for solving complex problems by breaking them down into simpler subproblems. It is applicable when the problem can be divided into overlapping subproblems which can be solved independently. The solutions to these subproblems are stored to avoid redundant computations, making the overall algorithm more efficient.

1- Knapsack Problem: This problem involves selecting a subset of items with given weights and values to maximize the total value without exceeding a specified weight limit.

2- Longest Common Subsequence: This algorithm finds the longest subsequence common to two sequences, which may not be contiguous, to determine their similarity.

3- Matrix Chain Multiplication: This problem focuses on finding the most efficient way to multiply a given sequence of matrices by determining the optimal order of multiplications.

4- Fibonacci Sequence: This algorithm generates the Fibonacci sequence, where each number is the sum of the two preceding ones, starting from 0 and 1.