| | |
Гомер Симпсон
Задача о рюкзаке
Обеденный перерыв Гомера Симпсона составляет T миллисекунд. Один гамбургер Гомер съедает за N миллисекунд, один чизбургер - за M. Какое количество гамбургеров и чизбургеров нужно съесть, чтобы потраченное время было как можно больше, не превышая T. При равенстве потраченного времени необходимо максимизировать суммарное количество съеденных гамбургеров и чизбургеров.
Ограничения: 1 <=M, N, T, <= 1000000 , все числа целые.
Входные данные
В первой строке находятся три числа - M, N и T, разделённые пробелами.
Выходные данные
Вывести максимальное суммарное число гамбургеров и чизбургеров. Если остаётся какое-то время, требуется указать его через пробел. Предпочтителен вариант, когда дополнительного времени остаётся как можно меньше.
Ввод |
Вывод |
1 2 1000 |
1000 |
2 1 1000 |
1000 |
3 6 1000 |
333 1 |
| |
|
0-1 рюкзак: наибольший вес
Задача о рюкзаке
Дано N золотых слитков массой m1, …, mN . Ими наполняют рюкзак, который выдерживает вес не более M . Какую наибольшую массу золота можно унести в таком рюкзаке?
Входные данные:
- в первой строке вводится натуральное число N , не превышающее 100 и натуральное число M , не превышающее 10000;
- во второй строке вводятся N натуральных чисел mi , не превышающих 100.
Выходные данные: выведите одно целое число - наибольшую возможную массу золота, которую можно унести в данном рюкзаке.
Примеры
№ |
Входные данные |
Выходные данные |
1 |
2 3195
38 41
|
79 |
| |
|
0-1 рюкзак: минимум предметов
Задача о рюкзаке
Дано N предметов массой m1, …, mN . Ими наполняют рюкзак, который выдерживает вес не более M . Как набрать вес в точности M , используя как можно меньше предметов?
Входные данные:
- в первой строке вводится натуральное число N , не превышающее 100 и натуральное число M , не превышающее 10000;
- во второе строке вводятся N натуральных чисел mi , не превышающих 100.
Выходные данные: выведите наименьшее необходимое число предметов или 0, если набрать данный вес невозможно.
Примеры
№ |
Входные данные |
Выходные данные |
1 |
1 5968
18
|
0 |
| |
|
Задача о рюкзаке с восстановлением ответа
Задача о рюкзаке
Дано N предметов массой m1, …, mN и стоимостью c1, …, cN соответственно.
Ими наполняют рюкзак, который выдерживает вес не более M . Определите набор предметов, который можно унести в рюкзаке, имеющий наибольшую стоимость.
Входные данные:
- в первой строке вводится натуральное число N , не превышающее 100 и натуральное число M , не превышающее 10000;
- во второй строке вводятся N натуральных чисел mi , не превышающих 100;
- в третьей строке вводятся N натуральных чисел сi , не превышающих 100.
Выходные данные: выведите номера предметов (числа от 1 до N), которые войдут в рюкзак наибольшей стоимости (по одному номеру в строке).
Примеры
№ |
Входные данные |
Выходные данные |
1 |
4 6
2 4 1 2
7 2 5 1
|
1
3
4 |
| |
|
Копилка
Задача о рюкзаке
Задан вес E пустой копилки и вес F копилки с монетами. В копилке могут находиться монеты N видов, для каждого вида известна ценность Pi и вес Wi одной монеты. Найти минимальную и максимальную суммы денег, которые могут находиться в копилке.
Входные данные
В первой строке находятся числа E и F (1 <= E <= F <= 10000). Во второй - число N (1<= N <= 500). В следующих N строках - по два числа, Pi и Wi (1 <= Pi <= 50000, 1 <= Wi <= 10000). Все числа целые.
Выходные данные
Выводятся два числа через пробел - минимальная и максимальная суммы. Если копилка не может иметь точно заданный вес при условии, что она наполнена монетами заданных видов, - вывести "This is impossible. ".
| |
|
Гирьки
Задача о рюкзаке
Дан набор гирь массой m1, …, mN . Можно ли их разложить на две чаши весов, чтобы они оказались в равновесии?
Входные данные:
- в первой строке вводится натуральное число N , не превышающее 100;
- во второе строке вводятся N натуральных чисел mi , не превышающих 100.
Выходные данные: выведите YES или NO .
Примеры
№ |
Входные данные |
Выходные данные |
1 |
1
17 |
NO |
2 |
2
19 19 |
YES |
| |
|
Сдача - 1
Задача о рюкзаке
Покупатель хочет приобрести товар стоимостью S рублей. У него есть N банкнот номиналом P1, P2, ..., PN рублей. У продавца есть M банкнот номиналом Q1, Q2, ..., QM . рублей. Определите, смогут ли они рассчитаться.
Входные данные:
- в первой строке задается сумма S ;
- во второй строке - число N ;
- в третьей строке - N чисел P1, P2, ..., PN ;
- в четвертой строке - число M ;
- в пятой строке - M чисел Q1, Q2, ..., QM .
Количество банкнот у продавца и покупателя и их номиналы не превосходят 100.
Выходные данные: если продавец сможет рассчитаться с покупателем, выведите номиналы банкнот, которые покупатель отдает продавцу и которые он получает в качестве сдачи. Выводите число со знаком “+ ”, если банкноту соответствующего номинала покупатель отдает продавцу и со знаком “- ”, если покупатель получает эту банкноту на сдачу. Номиналы банкнот разделяйте пробелом.
Если они не могут рассчитаться, выведите строку Impossible .
Примеры
№ |
Входные данные |
Выходные данные |
1 |
10
3
3 9 14
2
6 2
|
-2 +9 +3 |
2 |
100
3
74 35 8
2
19 6
|
Impossible |
| |
|
Снова ка-штаны
Задача о рюкзаке
В этой задаче, как и в задаче B, Петя снова собирает своего M-лапого Зверя на прогулку (однако количество лап у Зверя в этой задаче может быть до 1000). Снова ему мама оставила N штанов, имеющих соответственно K1, K2, …, KN штанин. Однако тетерь Петя хочет надеть на Зверя штаны так, чтобы выполнялись следующие условия:
- на каждой лапе была надета хотя бы одна штанина (гарантируется, что это всегда возможно),
- количество штанин, надетых на самую «утепленную» лапу, должно как можно меньше отличаться от количества штанин, надетых на самую легко одетую лапу (когда количество штанов, одетых на разные лапы, сильно отличается, Зверь испытывает дискомфорт),
- в отличие от задачи B Петя не обязан надеть на Зверя все имеющиеся штаны — какие-то из них можно оставить дома.
Как и раньше, любые штаны можно надевать на любой набор лап. В частности, нельзя несколько штанин одних и тех же штанов надеть на одну и ту же лапу Зверя.
Помогите Пете – напишите программу, которая для каждой лапы укажет, сколько штанин должно быть на нее надето.
Входные данные
Вводится сначала число M, а затем число N (1 ≤ M ≤ 1000, 1 ≤ N ≤ 100). Далее вводятся N чисел Ki, обозначающих число штанин у оставленных мамой штанов (1 ≤ Ki ≤ M). Сумма всех Ki не меньше, чем M.
Выходные данные
Выведите M строк, в i-ой строке должно быть выведено количество штанин, надетых на i-ю лапу. Если искомых ответов несколько, то выведите любой из них.
Примеры
№ |
Входные данные |
Выходные данные |
Пояснение |
1 |
4 3
1 2 3 |
1
1
1
1 |
Первые штаны надеты на лапу 1;
вторые штаны не используем;
третьи штаны надеты на лапы 2, 3 и 4.
Таким образом, на всех лапах по 1 штанине. |
2 |
4 2
3 2 |
2
1
1
1 |
Первые штаны надеты на лапы 1, 2 и 3;
вторые штаны надеты на лапы 1 и 4.
Таким образом, количество штанов на самой «утепленной» лапе (это лапа номер 1) – 2, а на остальных лапах по одной штанине, т.е. количество штанин на разных лапах отличается на один. Нетрудно заметить, что в этом примере нельзя одеть зверя так, чтобы на всех лапах было поровну штанин, поэтому этот ответ является оптимальным. |
| |
|
Кристаллы максимуса
Динамическое программирование
Динамическое программирование: последовательности
Задача о рюкзаке
Максимус очень любит коллекционировать кристаллы. Среди всех кристаллов у него есть один самый любимый с магической силой равной n . Также у него есть коллекция совершенных кристаллов. Совершенный кристалл - это кристалл, магическая сила которого равна квадрату натурального числа.
У Максимуса выдался свободный вечер, и он задумался: сколько нужно ему совершенных кристаллов, чтобы сумма их магических сил равнялась бы магической силе его любимого кристалла?
Квадратом натурального числа является число, которое получается умножением натурального числа на себя. Например, 1, 4 и 9 - это квадраты натуральных чисел, а 2, 3 и 5 - нет.
Ваша задача - помочь Максимусу найти минимальное количество совершенных кристаллов, сумма магических сил которых равна n .
Входные данные
Программа получает на вход натуральное число n (n < 104).
Выходные данные
Выведите ответ на задачу.
Примеры
№ |
Входные данные |
Выходные данные |
Примечание |
1 |
12
|
3
|
12 = 4 + 4 + 4 |
2 |
13 |
2 |
13 = 4 + 9 |
| |
|
Сумма фишек
Динамическое программирование
Задача о рюкзаке
Задача о рюкзаке
Алиса и Громозека играют в фишки по следюущим правилам. Громозека загадывает определенное число, а Алиса должна использовать свои фишки, чтобы составить сумму, равную этому числу. У Алисы есть фишки, на каждой из которых записано определенное число. Алиса имеет неограниченный запас фишек с каждым числом. Если Алиса сможет составить нужную сумму, используя свои фишки, она победит.
Ваша задача - определить, сможет ли Алиса победить Громозеку и если да, то сколько различных комбинаций у нее есть для достижения победы. Если Алиса не сможет победить Громозеку, то вы должны вывести число 0.
Входные данные
Программа получает в первой строке два числа: n - количество различных чисел, которые записаны на фишках, num - число, которое загадал Громозека. Во второй строке записаны n различных чисел ci - числа, каждое из которых может быть записано на фишке. На каждой фишке записано только одно число из набора чисел ci . При этом, количество фишек с числом ci не ограниченно. Все фишки с одинаковым числом, считаются одинаковыми. Другими словами, комбинация фишек 2+1 и 1+2 считается одной комбинацией.
Ограничения
1 <= n <= 300
1 <= ci <= 5000
- Все значения
ci уникальны.
0 <= num <= 5000
Выходные данные
Выведите одно число - количество комбинаций, которым Алиса может выиграть Громозеку. Если Алиса не может выиграть, то выведите на экран 0.
Примечание
В первом примере есть 4 способа набрать сумму, равную 5:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
| |
|
Сумма фишек
Динамическое программирование
Задача о рюкзаке
Задача о рюкзаке
Алиса и Громозека играют в фишки по следюущим правилам. Громозека загадывает определенное число, а Алиса должна использовать свои фишки, чтобы составить сумму, равную этому числу. У Алисы есть фишки, на каждой из которых записано определенное число. Алиса имеет неограниченный запас фишек с каждым числом. Если Алиса сможет составить нужную сумму, используя свои фишки, она победит.
Ваша задача - определить, сможет ли Алиса победить Громозеку и если да, то сколько различных комбинаций у нее есть для достижения победы. Если Алиса не сможет победить Громозеку, то вы должны вывести число 0.
Входные данные
Программа получает в первой строке два числа: n - количество различных чисел, которые записаны на фишках, num - число, которое загадал Громозека. Во второй строке записаны n различных чисел ci - числа, каждое из которых может быть записано на фишке. На каждой фишке записано только одно число из набора чисел ci . При этом, количество фишек с числом ci не ограниченно. Все фишки с одинаковым числом, считаются одинаковыми. Другими словами, комбинация фишек 2+1 и 1+2 считается одной комбинацией.
Ограничения
1 <= n <= 300
1 <= ci <= 5000
- Все значения
ci уникальны.
0 <= num <= 5000
Выходные данные
Выведите одно число - количество комбинаций, которым Алиса может выиграть Громозеку. Если Алиса не может выиграть, то выведите на экран 0.
Примечание
В первом примере есть 4 способа набрать сумму, равную 5:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1
| |
|
Айвен собирает кристаллы
Динамическое программирование
Задача о рюкзаке
Юный волшебник Айвен отправляется в волшебный лес, чтобы набрать волшебных кристаллов. Каждый кристалл, растущий в данном лесу, обладает своей массой. Айвен имеет рюкзак, который может выдержать определенный вес M . Айвен хочет использовать свой рюкзак по максимуму и набрать кристаллов такое количество, чтобы суммарно их вес равнялся в точности весу, который может выдержать его рюкзак.
Вам стали известны массы кристаллов, которые растут в волшебном лесу. Выведите "YES ", если Айвен сможет набрать кристаллов суммарным весом ровно M , иначе выведите "NO ".
Входные данные
В первой строке вводится натуральное число N , не превышающее 100 и натуральное число M , не превышающее 104. Во второй строке вводятся N натуральных чисел mi , не превышающих 100.
Выходные данные
Выведите YES или NO .
| |
|
0-1 Рюкзак
Задача о рюкзаке
Дано N предметов массой m1, …, mN и стоимостью c1, …, cN соответственно.
Ими наполняют рюкзак, который выдерживает вес не более M . Какую наибольшую стоимость могут иметь предметы в рюкзаке?
Входные данные
В первой строке вводится натуральное число N , не превышающее 100 и натуральное число M , не превышающее 10000. Во второй строке вводятся N натуральных чисел mi , не превышающих 100. Во третьей строке вводятся N натуральных чисел сi , не превышающих 100.
Выходные данные
Выведите наибольшую стоимость рюкзака.
| |
|
Весы
Задача о рюкзаке
Если в продаже нет стандартного набора гирь, измерение массы становится большой проблемой. Ваш набор содержит n гирь массой 1 грамм, 4 грамма, 16 грамм, ..., 4n - 1 грамм. Кроме того, у вас есть две чаши весов. Чтобы взвесить объект, надо положить его на левую чашу весов и поставить некоторые гири на левую и правую чашу для достижения равновесия. Требуется найти, сколько целых масс в диапазоне [1; m ] возможно измерить, используя весы и данный набор гирь.
Входные данные
В единственной строке содержаться 2 целых числа m и n (1 ≤ n , m ≤ 109 ) .
Выходные данные
Выведите одно число - количество масс, которые можно измерить с помощью этих гирь.
| |
|
Сдача - 2
Задача о рюкзаке
Покупатель хочет приобрести товар стоимостью S рублей. У него есть N банкнот номиналом P1, P2, ..., PN рублей. У продавца есть M банкнот номиналом Q1, Q2, ..., QM. рублей. Определите, смогут ли они рассчитаться.
Входные данные
Программа получает на вход сумму S. Далее идет число N затем P1, P2, ..., PN. Далее идет число M, затем Q1, Q2, ..., QM.Количество банкнот у продавца и покупателя и их номиналы не превосходят 100.
Выходные данные
Если продавец сможет рассчитаться с покупателем, выведите наименьшее количество банкнот, которое придется отдать продавцу на сдачу.
Если они не могут рассчитаться, выведите число -1.
| |
|
Гирьки: три кучки одного размера
Задача о рюкзаке
Дан набор гирек массой m1, …, mN. Разделите его на три кучки равной масссы, содержащие равное число гирек.
Входные данные
Первая строка входных данных содержит натуральное число N, не превышающее 18. Далее идет N натуральных чисел mi, не превышающих 100.
Выходные данные
Программа должна вывести номера гирек для каждого из наборов в три строки или строчку No solution, если решения не существует.
| |
|
Гирьки: четыре кучки
Задача о рюкзаке
Дан набор гирек массой m1, …, mN. Можно ли их разделить на четыре кучки равной массы?
Входные данные
Первая строка входных данных содержит натуральное число N, не превышающее 14. Далее идет N натуральных чисел mi, не превышающих 100.
Выходные данные
Программа должна вывести номера гирек для каждого из наборов в четыре строки или строчку No solution, если решения не существует.
| |
|
Строковые артефакты
Задача о рюкзаке
Команда исследователей-археологов, отправилась в затерянный храм на поиски древних артефактов. На каждом артефакте записана строка, состоящая из символов "0 " и "1 ". Археологи узнали, что выйти из храма с артефактами можно только в том случае, если суммарное количество нулей в строках, записанных на всех, взятых с собой артефактах, будет не больше m , а суммарное количество единиц не больше n . Исследователи хотят унести как можно больше артефактов. Ваша задача определить, какое максимальное количество артефактов исследователи-археологи смогут унести.
Входные данные
Первая строка содержит целое число k - количество артефактов в храме. Далее идут k строк si ; в i -й строке записана строка с i -го артефакта, состоящая из "0 " и "1 ".
На k+2 строке записаны 2 числа: m и n .
Ограничения
1 <= k <= 600
1 <= длина si <= 100
si состоит только из цифр '0' and '1' .
1 <= m, n <= 100
Выходные данные
Выведите ответ на задачу.
Пояснения к тестовым примерам
В первом тестовом примере наибольшим подмножеством, содержащим не более пяти 0 и не более трех 1, является {"10", "0001", "1", "0"} , поэтому ответ - 4 .
Другие допустимые, но меньшие подмножества {"0001", "1"} и {"10", "1", "0"} .
Подмножества {"111001"} является недопустимым, так как содержит четыре 1, что больше n.
| |
|
Две стены
Задача о рюкзаке
У Пети есть набор из N кирпичиков. Каждый кирпичик полностью окрашен в один из K цветов, i-й кирпичик имеет размер 1×1×Li. Петя знает, что он может построить из всех кирпичиков прямоугольную стену толщиной 1 и высотой K, причем первый горизонтальный слой кирпичиков в стене будет первого цвета, второй - второго и т. д. Теперь Петя хочет узнать, может ли он из своего набора построить две прямоугольные стены, обладающие тем же свойством. Помогите ему выяснить это.
Входные данные
В первой строке входных данных задаются числа N и K (1 <= N <= 5000, 1 <= K <= 100). Следующие N строк содержат описание Петиных кирпичиков: сначала длина Li, затем номер цвета Ci (1 <= Li <= 100, 1 <= Ci <= K). Известно, что у Пети не более 50 кирпичиков каждого цвета.
Выходные данные
Выведите в первой строке YES, если Петя сможет построить из всех своих кирпичиков две прямоугольные стены высоты K, j-й слой кирпичиков в каждой из которых будет j-го цвета, и NO в противном случае. В случае положительного ответа, выведите во второй строке в произвольном порядке номера кирпичиков, из которых следует построить первую стену (кирпичики нумеруются в том порядке, в котором они заданы во входных данных, начиная с 1). Если решений несколько, можно выдать любое из них.
| |
|
Дизайнерский лифт
Задача о рюкзаке
Дизайн-студия Артемия Индюкова получила заказ на разработку очень пафосного лифта для нового небоскреба. За работу взялся сам Артемий, отличающейся, кстати, редкой неадекватностью. У него есть идея-фикс: для управления лифтом достаточно четырех кнопок. Кнопки должны быть следующие:
- Поднятся на A этажей вверх
- Поднятся на B этажей вверх
- Поднятся на C этажей вверх
- Спустится на первый этаж
Изначально лифт находится на первом этаже. Пассажир лифта использует первые три кнопки чтобы попасть на тот этаж, на который он хочет. Если пассажир пытается подняться вверх на A, B или C этажей, а такого этажа в здании не существует (т.е. пассажир хочет подняться выше N-го, последнего этажа), то лифт никуда не едет.
Заказчики проекта оказались с юмором и вместе с отказом от футуристичного дизайна решили оценить адекватность Артемия по шкале от 1 до N. Оценка адеватности равна количеству этажей, на которые можно попасть с первого с помощью такого лифта. Помогите им в этом.
Входные данные
Первая строка содержит число N – высоту небоскреба (1 <= N <= 500 000).
Вторая строка содержит три числа A, B и C, задающие параметры кнопок (1 <= A, B, C <= 100 000).
Выходные данные
Выведите единственное число — оценку адекватности Артемия Индюкова.
| |
|
Локальная сеть
Минимальный каркас
Задача о рюкзаке
Алексей работает системным администратором в локальной домовой сети. Его сеть соединяет множество квартир и располагается в нескольких зданиях.
Сеть постоянно расширяется и Алексею поручено проложить новый участок сети. У него есть схема, на которой указаны все возможные соединения между парами квартир и для каждого соединения он знает длину провода, необходимого для его прокладки. Его цель состоит в том, чтобы все квартиры были подключены к сети (возможно через другие квартиры).
Компания, в которой работает Алексей покупает кабель только в одном специализированном магазине. В магазине продается кабель пятой и шестой категорий по цене P5 и P6 рублей за метр. При этом в наличии имеется только Q5 метров кабеля пятой категории и Q6 метров кабеля шестой категории.
Алексею необходимо составить план постройки сети с наименьшими затратами. План представляет собой список соединений между квартирами, при этом каждому соединению должно быть приписано, кабель какой категории будет проложен между этими квартирами (пятой или шестой). Стоимость прокладки этой сети равна сумме стоимости прокладки всех соединений. Общая длина кабеля каждой категории не должна превышать количество кабеля, имеющегося в магазине.
Входные данные
В первой строке входного файла содержится число N — количество квартир, которые необходимо соединить и M — количество возможных соединений (1 ≤ N ≤ 1000, 1 ≤ M ≤ 10 000).
Следующие M строк содержат описание возможных соединений. Каждое описание состоит из трех чисел A, B и L — где A и B задают номера квартир, а L — длина соединения между ними (1 ≤ L ≤ 100). Квартиры занумерованы от 1 до N.
Последняя строка входного файла содержит числа P5, Q5, P6, Q6 – цену и количество кабеля пятой и шестой категории соответственно (1 ≤ P, Q ≤ 10 000) .
Выходные данные
Если все квартиры можно соединить в сеть, то следует вывести N строк, описывающих план сети. Первая строка должна содержать стоимость прокладки сети. Следующие N-1 строк должны содержать описание соединений, представленных двумя числами каждое: Ai и Ci, где Ai — номер соединения в списке возможных соединений (от 1 до M), а Ci задает категорию кабеля и может принимать значения 5 или 6. Если планов несколько — выведите любой из них.
Если все квартиры соединить невозможно выведите слово Impossible.
| |
|
Маскарад
Задача о рюкзаке
По случаю введения больших новогодних каникул устраивается великий праздничный бал-маскарад. До праздника остались считанные дни, поэтому срочно нужны костюмы для участников. Для пошивки костюмов требуется L метров ткани. Ткань продается в N магазинах, в которых предоставляются скидки оптовым покупателям. В магазинах можно купить только целое число метров ткани. Реклама магазина номер i гласит "Мы с радостью продадим Вам метр ткани за Pi бурлей, однако если Вы купите не менее Ri метров, то получите прекрасную скидку — каждый купленный метр обойдется Вам всего в Qi бурлей". Чтобы воплотить в жизнь лозунг "экономика страны должна быть экономной", правительство решило потратить на закупку ткани для костюмов минимальное количество бурлей из государственной казны. При этом ткани можно купить больше, чем нужно, если так окажется дешевле. Ответственный за покупку ткани позвонил в каждый магазин и узнал, что:
1) реклама каждого магазина содержит правдивую информацию о ценах и скидках;
2) магазин номер i готов продать ему не более Fi метров ткани.
Ответственный за покупку очень устал от проделанной работы и поэтому поставленную перед ним задачу «закупить ткань за минимальные деньги» переложил на своих помощников. Напишите программу, которая определит, сколько ткани нужно купить в каждом из магазинов так, чтобы суммарные затраты были минимальны.
Входные данные
В первой строке записаны два целых числа N и L (1≤N≤100, 0≤L≤100). В каждой из последующих N строк находится описание магазина номер i — 4 целых числа Pi, Ri, Qi, Fi (1≤Qi≤Pi≤1000, 1≤Ri≤100, 0≤Fi≤100).
Выходные данные
Первая строка должна содержать единственное число — минимальное необходимое количество бурлей.
Во второй строке выведите N чисел, разделенных пробелами, где i-ое число определяет количество метров ткани, которое нужно купить в i-ом магазине. Если в i-ом магазине ткань покупаться не будет, то на i-ом месте должно стоять число 0. Если вариантов покупки несколько, выведите любой из них.
Если ткани в магазинах недостаточно для пошивки костюмов, выходной файл должен содержать единственное число -1.
| |
|