The Design of Approximation Algorithms