eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Стоимость прогулки

Стоимость прогулки

Есть несколько катеров и большая группа людей. Для каждого катера известна его вместимость. Для каждого человека известно, на каких катерах он предпочел бы прокатиться. После опыта предыдущей задачи владельцы катеров выяснили, что подобный способ оплаты может быть весьма невыгоден. Поэтому было решено брать одинаковую плату за каждый используемый катер, независимо от количества людей на нем. Требуется распределить людей по катерам на одну морскую прогулку так, чтобы минимизировать количество используемых катеров. \InputFile Два числа \textbf{N} и \textbf{K} (\textbf{1} ≤ \textbf{N} ≤ \textbf{16}, \textbf{1} ≤ \textbf{K} ≤ \textbf{100}) - количество катеров и людей. \textbf{N} строк по одному числу в каждой - \textbf{s} (\textbf{0}≤ \textbf{s} ≤ \textbf{100}) - количество мест в катере. Далее \textbf{K} строк, в каждой из которых дано число \textbf{t} - количество катеров, которые подходят текущему человеку, после чего следует список номеров этих катеров. Все номера в пределах от \textbf{1}до \textbf{N}, каждый номер встречается не более одного раза. \OutputFile Одно число - минимальное количество катеров, либо \textbf{-1}, если всех людей рассадить по катерам не получится.
Лимит времени 2 секунды
Лимит использования памяти 64 MiB
Входные данные #1
3 5
1
2
3
3 1 2 3
2 1 2
1 1
2 1 2
3 1 2 3
Выходные данные #1
3
Источник III Международная Летняя школа программирования 2012 г. Севастополь