Of all mathematics techniques employed in Operations Research, dynamic programming is perhaps the simplest in concept and one of the most difficult to apply. One of the difficulties in applying dynamic programming is the lack of a clear-cut formulation and solution algorithm (Shamblin and Steven, 1974). As a result, each problem requires basic decisions for formulation. Dynamic programming is a technique that can be used to solve many optimization problems that require interrelated solutions, i.e., decisions which must be made in a sequence and which influence future decisions in that sequence. In most applications, dynamic programming obtains solutions by working backwards from the beginning, thus breaking a large, unwieldy problem into a series of smaller, more tractable problems. In this chapter, we begin by introducing the dynamic programming recursion and apply it to a multi-project investment problem. Next, the time-cost trade-off problem will be revisited using dynamic programming.