Задача о рюкзаке - 2
(Время: 2 сек. Память: 16 Мб Сложность: 56%)
Одной из классических NP-полных задач является так называемая Задача о рюкзаке. Формулируется она следующим образом.
Дано n предметов, каждый из которых характеризуется неотрицательными весом wi и стоимостью ci. Необходимо выбрать некоторый набор этих предметов так, чтобы суммарный вес этого набора не превышал W, а суммарная стоимость была максимальна.
Если существует несколько удовлетворяющих этому наборов, то искомый набор должен содержать минимальное число элементов, а при прочих равных быть лексикографически минимальным при выписывании номеров составляющих его предметов в порядке неубывания. Наборы сравниваются как векторы из чисел, а не как строки, образованные конкатенацией этих чисел.
Ваш младший брат тоже очень хочет участвовать в Интернет-олимпиадах усложненного уровня, когда вырастет, поэтому Вы регулярно его тренируете. В данный момент Вы готовите тесты к этой задаче. Так как халтуры Вы не любите, то хотите приготовить набор из содержательных тестов.
Содержательным, по Вашему мнению, тест является тогда и только тогда, когда все веса предметов различны и не меньше Wmin, все стоимости предметов различны и не меньше Cmin, в наборе, соответствующем правильному ответу, содержится не менее Kmin элементов и, кроме того, вместе с этим набором существуют:
1. набор, дающий такую же стоимость, но содержащий больше предметов;
2. набор, дающий такую же стоимость, содержащий такое же число элементов, но лексикографически идущий позже правильного ответа.
Кроме этого, сумма всех весов и сумма всех стоимостей не должны превосходить 1018, так как младший брат еще слишком мал, чтобы реализовывать операции с длинными числами.
После 5 часов сидения за бумагой, Вы решили написать программу, составляющую за Вас такие тесты.
Входные данные
Входной файл INPUT.TXT содержит четыре числа: n, Wmin, Kmin и Cmin (6 ≤ n ≤ 25, 1 ≤ Wmin ≤ 109, 1 ≤ Cmin ≤ 109, 1 ≤ Kmin ≤ n−1). Гарантируется, что всегда существует хотя бы одно решение.
Выходные данные
В выходной файл OUTPUT.TXT в первую строку выведите числа n и W. Число W определяете Вы. Далее выведите n строк, в каждой 2 числа: wi и ci, разделенные пробелами. Полученный набор должен быть содержательным. При существовании нескольких таких наборов выведите любой.
Пример
№ | INPUT.TXT | OUTPUT.TXT |
1 | 6 9 2 10 | 6 40
10 12
12 15
22 27
18 25
25 36
15 16 |
Для отправки решения задачи необходимо зарегистрироваться и авторизоваться!
|