This document outlines a course on analysis and design of algorithms, focusing on dynamic programming techniques and their applications. It covers various problems, including the knapsack problem, coin change problem, and maximum coin collection in a grid, emphasizing the recurrence relations used to derive solutions. The course aims to equip students with the understanding and skills to design efficient algorithms for optimizing problem-solving.