Pātuhitia tēnei: Dynamic programming , its principles, applications, strengths, and limitations