Please allow me to address the [set cover problem](https://en.wikipedia.org/wiki/Set_cover_problem) approach in a new answer, so the question won't introduce more confusions. I would update this answer as I venture through this path. And first, I have to explain myself a bit more. I've deserted maths for a decade more (not intentionally though). So my maths ability drops to every-day-maths capable. I'm picking stuffs up as I progress. It seems I have made a wrong choice regarding $L_{j}$. As my goal is to select crew that can fulfill all jobs, $L_{j}$ won't help here. Instead list of doable jobs per worker should be the one to get. $U \leftarrow$ all jobs $W \leftarrow$ all workers $L_w \leftarrow$ jobs can be done by worker $w$ (where $w \in W$ and $L_w \in U$) Grep the [set cover](https://en.wikipedia.org/wiki/Set_cover_problem) ILP from wiki: $$ \mathrm{minimize} \sum_{j \in L_w} x_j $$ for all $e \in U$ $$ \sum_{j_{:e} \in L_w} x_j \ge 1 $$ for all $j \in L_w$ $$ x_j \in \{0,1\} $$ now we have the combination of workers (first part solved), correct? ------ Below stuffs were turned out unused. $Z \leftarrow$ slots $n_u = |U|$ $u_j \in U$ (where $1 \le j \le n_u$) $n_w = |W|$ $w_i \in W$ (where $1 \le i \le n_w$) $S \leftarrow$ all skills & abilities $s_j \leftarrow$ job $j$ skills, $s_j \in S$ (where $1 \le j \le n_u$) $S' \in S$ (all skills used in jobs) where: $$ S' = \bigcup_{j=1}^{n_u} s_j $$ $s_i \leftarrow$ worker $i$ skills, $s_i \in S' \in S$ (where $1 \le i \le n_w$) $L_j \leftarrow$ suitable workers to job $j$ (where $j \in U$) $v_i \leftarrow$ worker $i$ score