Задача о рюкзаке
시간 제한2초메모리 제한1024 MB
물건 무게와 용량 c가 주어질 때 무게 제한을 만족하는 부분집합들이 매트로이드를 이루는지 판정하고, 아니면 위반된 공리와 반례를 출력한다.
문제
Задача о рюкзаке формулируется следующим образом: дано предметов, -й из которых имеет вес и стоимость , требуется построить набор предметов максимальной стоимости, чтобы их суммарный вес не превосходил числа (размеров рюкзака). Известно, что задача о рюкзаке является -трудной, за время, пропорциональное суммарному весу предметов, задачу можно решить с использованием динамического программирования.
Однако оказывается, что в некоторых случаях задачу о рюкзаке можно решить жадно. Один из таких случаев возникает, когда экземпляр задачи о рюкзаке представляет собой матроид.
Матроидом называется пара , где --- некоторое конечное множество, а --- некоторое семейство подмножеств , элементы называют независимыми. Множество должно удовлетворять следующим аксиомам:
- ;
- Если и , то ;
- Если и , то найдется , такой что .
Здесь как обозначено количество предметов в множестве .
В качестве примера матроида можно превести множество ребер неориентированного графа, где множество ребер является независимым, если оно является ациклическим.
Рассмотрим множество предметов с весами . В качестве выберем эти предметы. Будем называть множество предметов независимым, если . Требуется выяснить, образует ли описанная конструкция для заданных и матроид.
입력
Первая строка входного файла содержит число (). Вторая строка содержит целых чисел (). Третья строка содержит число ().
출력
Выведите "YES", если множество решений задачи о рюкзаке образует матроид. В противном случае выведите "NO".
Во втором случае на второй строке выведите одно целое число --- номер аксиомы, которая нарушается. Если нарушается вторая или третья аксиома, то на следующих двух строках выведите описания множеств и , для которых утверждение аксиомы не выполняется. Каждое множество описывается количеством предметов в нем, после чего должны следовать номера этих предметов.