Even though it is well known that for most relevant computational problems different algorithms may perform better on different classes of problem instances, most computational experiments still focus on determining a single best algorithm configuration based on aggregate results such as the average. In this paper, we propose Integer Programming based approaches to build decision trees for the Algorithm Selection Problem. These techniques allow to automatically: (i) find the most important problem features to determine problem classes; (ii) group the problems into classes and (iii) select the best algorithm configuration for each class. To evaluate this new approach, extensive computational experiments were executed using the linear programming algorithms implemented in the COIN-OR Branch & Cut solver in a comprehensive set of instances, including all MIPLIB benchmark instances. The results exceeded our initial expectations. While the single best parameter setting discovered decreased the total running time by 22%, our approach decreased the total running time by 40% in average in 10-fold cross validation experiments. These results indicate that our method generalizes quite well and does not overfit.