Dinamičko programiranje je nastalo kao način rešavanja jedne klase algoritamskih problema, u kojima se traži optimalno rešenje, tj. ono rešenje koje maksimizira ili minimizira neku zadatu veličinu. Kasnije se naziv preneo na širu klasu problema koji se rešavaju u osnovi istom idejom, a to je rešavanje manjih problema istog tipa i njihovo kombinovanje radi dobijanja rešenja polaznog, većeg problema.
Na početnom primeru prve lekcije je detaljno objašnjena ideja i uslovi pod kojima problemi mogu da se rešavaju ovom metodom. Zatim su dati jednostavni primeri na kojima može da se uvežbava postupak rešavanja.
U drugoj lekciji se nalazi još nekoliko odabranih primera, od kojih je svaki po nečemu karakterističan i pomaže da se stekne potrebna širina u sagledavanju problema sa manje očiglednim rešenjima.