Finding Optimal Solutions with Branch and Bound