This document discusses two algorithms: divide-and-conquer and dynamic programming. Divide-and-conquer breaks problems into independent subproblems, solves the subproblems, and combines their solutions. Dynamic programming solves subproblems once and saves their solutions in a table to solve the original problem more efficiently. Examples include computing the Fibonacci sequence and matrix chain multiplication.