Dynamic programming practice problems