Linear and combinatorial programming