Dynamic Programming Algorithm For The Optimal Binary Search Tree Problem