Динамическое программирование на таблицах(46 задач)
Динамическое программирование по подстрокам(21 задач)
Задача о рюкзаке(34 задач)
Впервые в жизни Петя летит на международную олимпиаду по программированию. Петя так волновался, что взял с собой множество вещей и теперь во время регистрации на рейс его чемодан не принимают, так как у него превышение разрешенной массы багажа.
У Пети в чемодане лежат N предметов, каждый предмет имеет свой вес Wi килограмм и ценность Ai рублей, причем оказалось так, что для любого предмета выполняется следующее неравенство:
W1 + W2 + … + Wi-1 ≤ Wi
Пете сообщили, что у него перевес чемодана в M килограмм, поэтому ему придется оставить в аэропорту какие-то предметы с суммарной массой не меньше M. При этом Петя хочет понести минимальный урон, а поэтому оставленные предметы должны иметь наименьшую возможную стоимость.
Требуется написать программу, которая подсчитает минимальную возможную стоимость оставленных предметов.
В первой строке задаётся количество предметов в багаже у Пети N (1 ≤ N ≤ 50) и какой у Пети перевес чемодана в килограммах M (1 ≤ M ≤ 1018). Во второй строке задаются N целых неотрицательных чисел – вес всех вещей Wi, сумма чисел не превышает 1018. В третьей строке заданы N целых неотрицательных чисел – ценность всех вещей Ai , все числа не превышают 109.
В выходной файл требуется вывести минимальную суммарную стоимость предметов, которые Петя будет вынужден оставить в аэропорту.
Ввод | Вывод |
|
|
|
|
Группа школьников решила сходить в поход вдоль Москвы-реки. У Москвы-реки существует множество притоков, которые могут впадать в нее как с правого, так и с левого берега.
Школьники хотят начать поход в некоторой точке на левом берегу и закончить поход в некоторой точке на правом берегу, возможно, переправляясь через реки несколько раз. Как известно, переправа как через реку, так и через приток представляет собой определенную сложность, поэтому они хотят минимизировать число совершенных переправ.
Школьники заранее изучили карту и записали, в какой последовательности в Москву-реку впадают притоки на всем их маршруте.
Помогите школьникам по данному описанию притоков определить минимальное количество переправ, которое им придется совершить во время похода.
Единственная строка содержит описание Москвы-реки между начальной и конечной точкой похода. Длина строки не превосходит \(200\) символов.
Каждый символ строки может быть одной из трех латинских букв L, R или B. Буква L означает, что очередной приток впадает в реку с левого берега, R - приток впадает в реку с правого берега и B - притоки впадают с обоих берегов реки в одном месте. Поход начинается на левом берегу перед описанной частью реки и заканчивается на правом берегу после описанной части.
Выведите одно целое число - минимальное количество переправ.
Рисунок к приведенному выше примеру.
LLBLRRBRL
5
Имеется бесконечное количество прямоугольных кирпичей размерами \(x_i \times y_i \times z_i\), каждый из которых можно ставить на любую грань (размеры каких-то двух стороны будут размерами основания, размер третьей стороны – высотой). Ваша задача – написать программу, находящую максимальную высоту башни, которую можно построить из этих кирпичей. Один кирпич может быть поставлен на другой, если размеры основания верхнего кирпича строго меньше соответствующих размеров основания нижнего.
В первой и единственной строке входного файла записано целое число \(N\) (\(1 \leq N \leq 30\)) – количество типов кирпичей, за которым следуют \(3\times N\) целых чисел (\(N\) троек \(x_i\), \(y_i\), \(z_i\)) описывающих размеры каждого типа кирпичей (\(1 \leq x_i, y_i, z_i \leq 65000\)).
Выведите в выходной файл единственное целое число - максимальную высоту башни.
1 10 20 30
40
2 6 8 10 5 5 5
21
На листке записано в одну строку \(N\) (\(2 \leq N \leq 100\)) целых положительных чисел. Каждое число не превышает 200. Играют двое. За каждый ход можно зачеркивать крайнее число либо слева, либо справа. Зачеркнутое число добавляется к очкам игрока. \(N\) – четное. Игру начинает первый игрок. Необходимо вывести максимально возможную сумму очков для первого игрока при условии, что противник играет наилучшим образом..
В первой строке входного файла содержится одно целое число \(N\) (\(2 \leq N \leq 100\)). В следующих \(N\) строках записан исходный ряд чисел, по одному числу в строке.
Выходной файл должен содержать единственное число – максимально возможную сумму очков для первого игрока при наилучшей игре второго игрока.
6 4 7 2 9 5 2
18
В традиционной музыке используются музыкальные звуки из некоторого набора, именуемого звукорядом. Звуки звукоряда принято группировать в октавы, в каждой из которых 12 звуков. Порядковый номер звука в пределах одной октавы назовем нотой. Таким образом, каждый звук можно задать парой чисел – номером октавы и номером ноты. Номер октавы \(К\) – произвольное целое число, номер ноты \(N\) принимает значение из интервала [01,12]. Звуки можно обозначать этими двумя числами, записанными рядом без пробелов (второе число всегда двузначное). Эту запись назовем кодом \(Q\). Например, \(Q\) = –108 для (–1)-й октавы, восьмой ноты. Значение \(Z\), определяемое по формуле \(Z = K\times 12 + N\) назовем абсолютным номером \(Z\) звука в звукоряде (для приведенного выше примера \(Z = –4\)).
Набор всех звуков, ноты которых принадлежат заданному подмножеству \(P\) номеров нот, назовем гармонией \(G\). Это означает, что любой звук с абсолютным номером \(Z = K\times 12 + n\), где \(n\) – номер ноты из \(P\), принадлежит этой гармонии при любом значении \(K\). Отсюда следует, что гармония однозначно определяется указанием \(P\). Две гармонии назовем эквивалентными, если при прибавлении некоторого одного и того же целого числа ко всем абсолютным номерам звуков первой гармонии получаются все элементы второй гармонии. Ограничимся рассмотрением только таких наборов гармоний, в которые наряду с каждой из гармоний входят и все эквивалентные ей. Для описания набора такого вида достаточно указать из каждой совокупности эквивалентных по одной гармонии \(G_i\) или соответствующему ей подмножеству \(P_i\). Базой \(B\) набора гармоний назовем совокупность всех таких \(P_i\).
Всякую совокупность одновременно звучащих звуков (не менее двух) будем называть аккордом \(A\). Для некоторого заданного набора гармоний назовем гармонией аккорда \(A\) такую гармонию \(G\) из него, что все звуки аккорда \(A\) принадлежат \(G\).
Будем говорить, что некоторый звук в тему для некоторого аккорда, если этот звук принадлежит хотя бы одной гармонии из множества всех гармоний этого аккорда.
Последовательное звучание произвольных звуков назовем мелодией. Каждому звуку мелодии может быть сопоставлен аккорд в порядке исполнения мелодии. Будем считать мелодию благозвучной для этой последовательности аккордов, если каждый ее звук оказывается в тему для соответствующего ему аккорда. Кучерявостью мелодии назовем сумму модулей разностей абсолютных номеров \(Z\) последовательно исполняемых звуков данной мелодии.
Пусть даны: база \(B\) набора гармоний, последовательность аккордов \(A\) и начальный звук \(Q\). Требуется написать программу, находящую наименее кучерявую из всех благозвучных мелодий, начинающихся с этого звука.
В первой строке записано целое число \(M\) — количество заданных элементов в базе набора гармоний (\(1 \leq M \leq 200\)). Далее следуют \(M\) строк, каждая из которых содержит описание одного из элементов в базе набора гармоний в виде последовательности составляющих ее номеров нот, записанных через пробел. В следующей строке находится целое число \(L\) — количество заданных аккордов (\(1 \leq L \leq 200\)). Каждая из последующих \(L\) строк содержит описание одного из аккордов в виде последовательности кодов составляющих его звуков, записанных через пробел. Описания аккордов следуют в порядке их исполнения. Последняя строка входного файла содержит код начального звука \(Q\). Все значения кодов звуков записываются тремя цифрами.
В первую строку выходного файла следует вывести минимально возможную кучерявость среди всех мелодий, удовлетворяющих описанным выше требованиям. Оставшиеся строки должны содержать \(L\) целых чисел — коды \(Q\) звуков, составляющих соответствующую мелодию. Если вариантов мелодий несколько, нужно вывести любую из них. Для заданных во входном файле данных всегда будет существовать хотя бы одна благозвучная мелодия.
3 1 5 8 11 1 5 8 12 1 6 8 5 101 106 010 112 -101 004 201 202 110 111 102
4 102 104 104 106 106