We present a simple family of algorithms for solving the Generalized Assignment Problem (GAP). Our technique is based on a novel combinatorial translation of any algorithm for the knapsack problem into an approximation algorithm for GAP. If the approximation ratio of the knapsack algorithm is and its running time is O(f(N)), our algorithm guarantees a (1 + ) approximation ratio, and it runs in O(M