There are $n$ jobs and $m$ machines. Assigning job $i$ to machine $j$ yields a profit of $c_{ij}$. Each job has a type $t_i$. Machine $j$ can take on up to $a_j$ jobs, but the number of job types must not exceed $b_j$. How should the jobs be assigned to the machines to maximize profit?
For example, in this case, it is optimal to assign job 1 to machine 1 and jobs 2 and 3 to machine 2.
This problem can be solved with an integer programming solver, but I would like to know of any algorithms or related papers that solve this problem.