Algorithm Design By Dynamic Programming Definition