Before enumerating the candidate solutions of a branch, the branch is checked against upper and lower estimated "bounds" on the optimal solution, and is discarded if it cannot produce a better solution than the best one found so far by the algorithm.