Вы можете смоделировать это как Задать проблему с покрытием . У вас есть элементы {P1, ..., Pn} и их k подмножеств T1, ..., Tk, определенных как Ti = {Pj: Pj любит Si}. Затем вы хотите найти наименьшую коллекцию подмножеств, чтобы их объединение было целым набором людей. Решение о том, является ли количество необходимых подмножеств меньше или равно числу, является NP-полным. Поиск фактического оптимального набора подмножеств NP-трудный.