아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Задача о рюкзаке

시간 제한2초메모리 제한1024 MB

요약
물건 무게와 용량 c가 주어질 때 무게 제한을 만족하는 부분집합들이 매트로이드를 이루는지 판정하고, 아니면 위반된 공리와 반례를 출력한다.
난이도

보통10점 중 4점

유형
그리디, 정렬, 구현
정답자
아직 제출이 없습니다

문제

Задача о рюкзаке формулируется следующим образом: дано nn предметов, ii-й из которых имеет вес w_iw\_i и стоимость v_iv\_i, требуется построить набор предметов максимальной стоимости, чтобы их суммарный вес не превосходил числа cc (размеров рюкзака). Известно, что задача о рюкзаке является NPNP-трудной, за время, пропорциональное суммарному весу предметов, задачу можно решить с использованием динамического программирования.

Однако оказывается, что в некоторых случаях задачу о рюкзаке можно решить жадно. Один из таких случаев возникает, когда экземпляр задачи о рюкзаке представляет собой матроид.

Матроидом называется пара ⟨X,I⟩\langle X, {\cal I}\rangle, где XX --- некоторое конечное множество, а I\cal I --- некоторое семейство подмножеств XX, элементы I\cal I называют независимыми. Множество I\cal I должно удовлетворять следующим аксиомам:

  1. I≠∅{\cal I} \ne \varnothing;
  2. Если A∈IA \in {\cal I} и B⊂AB \subset A, то B∈IB \in {\cal I};
  3. Если A,B∈IA, B \in {\cal I} и ∣A∣>∣B∣|A| > |B|, то найдется x∈A∖Bx \in A \setminus B, такой что B∪x∈IB \cup \\{x\\}\in{\cal I}.

Здесь как ∣A∣|A| обозначено количество предметов в множестве AA.

В качестве примера матроида можно превести множество ребер неориентированного графа, где множество ребер является независимым, если оно является ациклическим.

Рассмотрим множество предметов с весами w_1,w_2,…,w_nw\_1, w\_2, \ldots, w\_n. В качестве XX выберем эти предметы. Будем называть множество предметов i_1,i_2,…,i_k\\{i\_1, i\_2, \ldots, i\_k\\} независимым, если w_i_1+w_i_2+…+w_i_k≤cw\_{i\_1}+w\_{i\_2}+\ldots+w\_{i\_k} \le c. Требуется выяснить, образует ли описанная конструкция для заданных w_1,w_2,…,w_nw\_1, w\_2, \ldots, w\_n и cc матроид.

입력

Первая строка входного файла содержит число nn (1≤n≤501 \le n \le 50). Вторая строка содержит nn целых чисел w_1,w_2,…,w_nw\_1, w\_2, \ldots, w\_n (1≤w_i≤1001 \le w\_i \le 100). Третья строка содержит число cc (max⁡w_i≤c≤∑w_i\max w\_i \le c \le \sum w\_i).

출력

Выведите "YES", если множество решений задачи о рюкзаке образует матроид. В противном случае выведите "NO".

Во втором случае на второй строке выведите одно целое число --- номер аксиомы, которая нарушается. Если нарушается вторая или третья аксиома, то на следующих двух строках выведите описания множеств AA и BB, для которых утверждение аксиомы не выполняется. Каждое множество описывается количеством предметов в нем, после чего должны следовать номера этих предметов.

예제2

  1. 예제 1

    입력
    3
    1 2 3
    4
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    3
    3 4 5
    7
    
    예상 출력
    NO
    3
    2 1 2
    1 3