2.6 Dynamic programming