| Условие задачи | | Прогресс | Попытки, все/успешные |
|
Темы:
Динамическое программирование: один параметр
В деревне Летовецк, где живут мудрые старцы и их ученики, существует древний банк, который хранит богатства в виде ле́токоинов — особых монет, обладающих магической силой. Однако банк установил строгие правила: чтобы снять деньги, нужно использовать только определённые суммы за одну операцию:
-
за одну операцию можно снять только 1 ле́токоин,
-
за одну операцию можно снять сумму 6x, где x - любое натуральное число (можно снять сумму равную 6, 36, 216, и т.д.),
-
за одну операцию можно снять сумму 9x, где x - любое натуральное число (можно снять сумму равную 9, 81, 729, ...).
Старец Летовец спросил своих учеников: за какое минимальное количество операций вы сможете снять ровно N ле́токоинов?
Примечание: невозможно повторно вносить снятые деньги в банк!
Формат входных данных
На вход подается целое число N (\(1<=N<=100000\)).
Формат выходных данных
Выведите ответ на задачу.
Примеры
| № |
Входные данные |
Выходные данные |
Пояснения |
| 1 |
127 |
4 |
При снятии 1 + 9 + 36 + 81 получится снять 127 летокоинов за 4 операции. |
| 2 |
3 |
3 |
1+1+1 = 3, всего 3 операции |
| 3 |
44852 |
16 |
|
| |
|
63/
5
|
|
Темы:
Простые числа и разложение на множители
Динамическое программирование: один параметр
Требуется заполнить N элементов массива, пронумерованных числами от 1 до N (A[1]…A[N]), натуральными числами от 2 до N+1, использовав каждое число ровно один раз, так, чтобы значение каждого элемента массива делилось бы нацело на его номер (т.е. для каждого i A[i] делилось бы на i).
Напишите программу, которая для заданного N вычислит количество способов такого заполнения массива.
Входные данные
Вводится одно натуральное число N (1≤N≤1000).
Выходные данные
Выведите одно число — искомое количество способов заполнения массива.
Примечание
Массив можно заполнить единственным способом: 3 2
| |
|
1/
1
|
|
Темы:
Динамическое программирование: один параметр
Мальчик подошел к платной лестнице. Чтобы наступить на любую ступеньку, нужно заплатить указанную на ней сумму. Мальчик умеет перешагивать на следующую ступеньку, либо перепрыгивать через ступеньку. Требуется узнать, какая наименьшая сумма понадобится мальчику, чтобы добраться до верхней ступеньки.

Входные данные
В первой строке входного файла вводится одно натуральное число 𝑁≤100 — количество ступенек.
В следующей строке вводятся 𝑁 натуральных чисел, не превосходящих 100 — стоимость каждой ступеньки (снизу вверх).
Выходные данные
Выведите одно число — наименьшую возможную стоимость прохода по лесенке.
| |
|
305/
63
|
|
Темы:
Динамическое программирование: один параметр
При переработке радиоактивных материалов образуются отходы трех видов — особо опасные (тип A), неопасные (тип B) и совсем не опасные (тип C). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более одного контейнера типа A. Стопка считается безопасной, если она не является взрывоопасной. Для заданного количества контейнеров N
определить число безопасных стопок.
Входные данные
Одно число 1≤N≤20.
Выходные данные
Одно число — количество безопасных вариантов формирования стопки.
Примечание
В примере из условия среди стопок длины 2 бывают безопасные стопки типов AB, AC, BA, BB, BC, CA, CB и CC. Стопки типа AA являются взрывоопасными.
| |
|
180/
61
|
|
Темы:
Динамическое программирование: один параметр
При переработке радиоактивных материалов образуются отходы двух видов — особо опасные (тип A) и неопасные (тип B). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более одного контейнера типа A. Стопка считается безопасной, если она не является взрывоопасной. Для заданного количества контейнеров N
определить количество возможных типов безопасных стопок.
Входные данные
Одно число 1 ≤ N ≤ 20.
Выходные данные
Одно число — количество безопасных вариантов формирования стопки.
Примечание
В примере из условия среди стопок длины 2 бывают безопасные стопки типов AB, BA и BB. Стопки типа AA являются взрывоопасными.
| |
|
120/
69
|
|
Темы:
Динамическое программирование: один параметр
Определите количество последовательностей из нулей и единиц длины N (длина - это общее количество нулей и едииниц), в которых никакие три единицы не стоят рядом.
Входные данные
Вводится натуральное число N, не превосходящее 40.
Выходные данные
Выведите количество искомых последовательностей. Гарантируется, что ответ не превосходит 231 − 1.
| |
|
140/
64
|
|
Темы:
Простые числа и разложение на множители
Динамическое программирование: один параметр
Требуется заполнить N элементов массива, пронумерованных числами от 1 до N (A[1]…A[N]), натуральными числами от 2 до N+1, использовав каждое число ровно один раз, так, чтобы значение каждого элемента массива делилось бы нацело на его номер (т.е. для каждого i A[i] делилось бы на i).
Напишите программу, которая для заданного N вычислит количество способов такого заполнения массива.
Входные данные
Вводится одно натуральное число N (1≤N≤60000).
Выходные данные
Выведите одно число — искомое количество способов заполнения массива.
Примечание
Массив можно заполнить единственным способом: 3 2
| |
|
2/
2
|
|
Темы:
Быстрая сортировка
Динамическое программирование: один параметр
В правильном N-угольнике провели некоторые диагонали так, что он оказался разбит на треугольники. Изначально стороны N-угольника и все его диагонали черные.
Разрешается выбрать четырехугольник, в котором ровно одна диагональ, и при этом эта диагональ черного цвета (сам четырехугольник не обязан быть полностью черным) и проделать с ним следующее: заменить диагональ на противоположную (т.е. если сам четырехугольник был ABCD и в нем была диагональ AC, то она меняется на диагональ BD), после чего перекрасить стороны этого четырехугольника и новую диагональ в красный цвет.
Требуется определить, можно ли с помощью таких операций сделать так, чтобы все отрезки (т.е. стороны N-угольника и изображенные диагонали) стали красными, и не осталось бы ни одного черного отрезка. А если это возможно, то какое минимальное количество операций для этого требуется.
Входные данные
Вводится сначала число N (3≤N≤30000). Далее идет описание N–3 проведенных диагоналей. Каждая диагональ описывается двумя натуральными числами — номерами вершин, которые она соединяет. Гарантируется, что проведенные диагонали внутри N-угольника не пересекаются.
Выходные данные
Выведите минимальное число действий, необходимое для того, чтобы перекрасить весь N-угольник и все его диагонали. Если перекрасить многоугольник указанным способом невозможно, выведите одно число –1 (минус один).
| |
|
1/
1
|
|
Темы:
Динамическое программирование: один параметр
В сообщении, состоящем из одних русских букв и пробелов, каждую букву заменили её порядковым номером в русском алфавите (А - 1, Б - 2, ..., Я - 33), а пробел - нулем. Требуется по заданной последовательности цифр найти количество исходных сообщений, из которых она могла получиться.
Входные данные
В первой строке содержится последовательность цифр. Цифр не более 100.
Выходные данные
Вывести одно число.
| |
|
3/
3
|
|
Темы:
Динамическое программирование: один параметр
Петя - большой любитель математических головоломок. Недавно он прочитал в одном популярном журнале о новой головоломке. Он пытался ее решить несколько дней, но это ему так и не удалось. Помогите Пете справиться с неподдающейся задачей.
В ряд выписаны n чисел. Требуется поставить между каждой парой соседних чисел один из знаков "+" или "×" таким образом, чтобы значение получившегося выражения было как можно больше. Использовать скобки не разрешается.
Например, для последовательности чисел 1, 2, 3, 1, 2, 3 оптимально расставить знаки следующим образом: 1 + 2 × 3 × 1 × 2 × 3. Значение выражения в этом случае равно 37.
Входные данные
В первой строке вводится число n (2 <= n <= 200000). Вторая строка содержит n целых чисел - числа, между которыми следует расставить знаки. Все числа находятся в диапазоне от 0 до 109.
Выходные данные
Выведите оптимальное выражение. В качестве знака "×" выводите символ "*" (звездочку). Если оптимальных решений несколько, выведите любое из них.
| |
|
5/
1
|
|
Темы:
Стек
Динамическое программирование: один параметр
Жадный алгоритм
Профиль Уральских гор задается ломаной (x1, y1), (x2, y2), …, (xN, yN), для координат вершин которой верны неравенства x1 < x2 < … < xN. Начальные и конечные точки профиля расположены на уровне моря (y1 = yN = 0).
На горном профиле заданы две различные точки A и B, между которыми требуется проложить дорогу. Эта дорога будет проходить по склонам гор и проектируемому горизонтальному мосту, длина которого не должна превышать L. Оба конца моста находятся на горном профиле. Дорога заходит на мост с одного конца и выходит с другого. Мост не может содержать точек, расположенных строго под ломаной (строительство тоннелей не предполагается).
Возможные примеры расположения моста Невозможное расположение моста

Достоверно известно, что строительство такого моста в данной местности возможно, причем позволит сократить длину дороги из точки A в точку B. Требуется написать программу, которая определит такое расположение горизонтального моста, что длина дороги от точки A до точки B будет наименьшей.
Формат входных данных
Первая строка входных данных содержит два целых числа N и L — количество вершин ломаной (2 ≤ N ≤ 100 000) и максимальную длину моста (1 ≤ L ≤ 106) соответственно. Вторая строка содержит координаты точки A, третья строка — координаты точки B. Точки A и B различны.
Последующие N строк содержат координаты вершин ломаной (x1, y1), (x2, y2), …, (xN, yN). Координаты вершин ломаной, а также точек A и B, задаются парой целых чисел, не превосходящих по абсолютному значению 106. Гарантируется, что x1 < x2 < … < xN и y1 = yN = 0, а также, что точки A и B принадлежат ломаной.
Формат выходных данных
В первой и второй строках выходных данных выведите координаты концов моста с точностью не менее 5 знаков после десятичной точки. В случае, когда решений несколько, выведите любое из них.
| |
|
14/
1
|
|
Темы:
Динамическое программирование: один параметр
Миша участвует в процедуре награждения на интеллектуальном шоу. В процессе награждения ему последовательно предлагают призы. У каждого приза есть стоимость. Про каждый приз Миша должен заявить, хочет ли он его взять. После того, как Миша возьмет или пропустит приз, ему показывается следующий, и так далее, вернуться к предыдущим призам и изменить свое решение нельзя.
В качестве первого приза Миша может взять любой приз, а затем Миша может взять приз, если его стоимость строго больше стоимости предыдущего взятого им приза.
Миша подсмотрел сценарий шоу и знает стоимости призов, а также порядок, в котором они будут ему предлагаться. Помогите ему выбрать призы таким образом, чтобы их суммарная стоимость была как можно больше.
Формат входных данных
Первая строка ввода содержит целая число \(n\) — количество призов (\(1 \le n \le 1000\)). Вторая строка содержит \(n\) чисел \(a_1, a_2, \ldots, a_n\) — стоимости призов в том порядке, в котором их покажут Мише (\(1 \le a_i \le 10^9\)).
Формат выходных данных
Выведите одно число — максимальную суммарную стоимость призов, которые может получить Миша.
| |
|
46/
8
|
|
Темы:
Динамическое программирование: один параметр
В фантастическом лесу живут различные существа, каждое из которых имеет свой уникальный номер, начинающийся с 1. Также у каждого существа есть свой уровень энергии, представленный целым числом. У первого существа уровень энергии равен 1. Каждое последующее существо имеет уровень энергии, который зависит от уникального номера существа. В общем виде уровень энергии существа можно выразиить следующим образом:
creature[1] = 1
creature[2 * i] = creature[i], если 2 <= 2 * i <= n
creature[2 * i + 1] = creature[i] + creature[i + 1], при 2 <= 2 * i + 1 <= n
Чтобы понять, насколько могущественны существа в лесу, необходимо найти существо с максимальным уровенем энергии.
Входные данные
Программа получает на вход натуральное число n (1 <= n <= 100) - количество существ в фантастическом лесу.
Выходные данные
Выведите максимальный уровень энергии среди всех существ в данном фантастическом лесу.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
1 |
1 |
| 2 |
7 |
3 |
| 3 |
3 |
2 |
| |
|
171/
71
|
|
Темы:
Динамическое программирование: один параметр
Вы - маг, который хочет собирать магическую энергию из домов вдоль улицы. Дома на этой улице расположены по кругу. Это означает, что первый дом является соседом последнего. В каждом доме сосредоточена определенная магическая энергия, и единственным ограничением является то, что если вы извлекаете магическую энергию из двух соседних домов в одну и ту же ночь, то это вызывает негативные последствия для вас и окружающей среды.
Зная уровень магической энергии в каждом доме, найдите максимальное количество магической энергии, которое вы можете собрать сегодня, избегая извлечения энергии из соседних домов в одну и ту же ночь.
Входные данные
В первой строке записано число n - количество домой вдоль улицы. Во второй строке - n целых чисел ai - количество магической энергии в i-м доме.
Ограничения на входные данные
1 <= n <= 100
0 <= a[i] <= 1000
1 <= i <= n
Выходные данные
Выведите максимальное количество магической энергии, которую вы сможете собрать.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
2 3 2 |
3 |
| 2 |
4
1 2 3 1 |
4 |
| 3 |
3
1 2 3 |
3 |
| |
|
6/
2
|
|
Темы:
Динамическое программирование: один параметр
Вы - маг, странствующий по волшебному лесу, в поисках своей утраченной магической силы. Эта магическая сила находится в волшебных кристаллах, которые растут на деревьях в этом волшебном лесу. На каждом дереве растет только один волшебный кристалл. Так как вы маг, то вы знаете какой силой обладает тот или иной кристалл, растущий на определенном дереве в этом лесу. Вы хотите получить в этом лесу как можно больше магической силы. Для этого вам следует выполнить следующее действие любое количество раз:
- Выберите любое дерево и соберите волшебный кристалл, который растет на нем, чтобы получить его магическую силу. Помните, что после того как был сорван кристалл с определенной силой, все кристаллы, чья сила на один меньше или на один больше, чем сила кристалла, который вы только что собрали, сами исчезают, оставляя вас с магической силой, равной силе собранного кристалла.
Определите максимальную магическую силу, которую вы можете получить, применяя вышеуказанное действие любое количество раз.
Входные данные
Первая строка входных данных содержит число n - количество деревьев в волшебном лесу. Вторая строка содержит n чисел ai - волшебная сила кристалла на i-м дереве.
Ограничения на входные данные
1 <= n <= 2 * 104
1 <= a[i] <= 104
1 <= i <= n
Выходные данные
Выведите максимальную магическую силу, которую вы можете получить.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
3 4 2 |
6 |
| 2 |
6
2 2 3 3 3 4 |
9 |
| |
|
78/
10
|
|
Темы:
Динамическое программирование: один параметр
Вы - маг, который хочет собирать магическую энергию из домов вдоль улицы. В каждом доме сосредоточена определенная магическая энергия, и единственным ограничением является то, что если вы извлекаете магическую энергию из двух соседних домов в одну и ту же ночь, то это вызывает негативные последствия для вас и окружающей среды.
Зная уровень магической энергии в каждом доме, найдите максимальное количество магической энергии, которое вы можете собрать сегодня, избегая извлечения энергии из соседних домов в одну и ту же ночь. Кроме этого, определите заранее какие дома вы должны посетить?
Входные данные
В первой строке записано число n - количество домой вдоль улицы. Во второй строке - n целых чисел ai - количество магической энергии в i-м доме.
Ограничения на входные данные
1 <= n <= 100
0 <= a[i] <= 400
1 <= i <= n
Выходные данные
Выведите в первой строке максимальное количество магической энергии, которую вы сможете собрать. Во второй строке выведите номера домов (в порядке возрастания, через пробел), которые вы посетите.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4
3 2 2 1 |
5
1 3 |
| 2 |
5
2 7 9 3 1
|
12
1 3 5 |
| |
|
156/
29
|
Темы:
Динамическое программирование: один параметр
Динамическое программирование
Имеется калькулятор, который выполняет три операции:
- Прибавить к числу
X единицу.
- Умножить число
X на 2.
- Умножить число
X на 3.
Определите кратчайшую последовательность операций, необходимую для получения из числа 1 заданное число N.
Входные данные
Программа получает на вход одно число X, не превосходящее 10 6.
Выходные данные
Выведите строку, состоящую из цифр "1", "2" или "3", обозначающих одну из трех указанных операций, которая получает из числа 1 число N за минимальное число операций. Если возможных минимальных решений несколько, выведите любое из них.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
1 |
|
| 2 |
5 |
121 |
| 3 |
562340 |
3333312222122213312 |
| |
|
1190/
327
|
|
Темы:
Динамическое программирование
Динамическое программирование: один параметр
Робот Сильвер движется по платному шоссе на планете Шелезяка. На каждом километре шоссе расположен пункт оплаты. Всего на шоссе n пунктов оплаты. Первый пункт оплаты находится в самом начале шоссе, n-й пункт оплаты находится в начале последнего километра шоссе. Заплатив нужную сумму в i-м пункте оплаты, робот может двигаться дальше либо до следующего пункта оплаты, либо же до того, который находится через 2 километра (то есть, если робот находится в пункте i, то он может двигаться либо до пункта i+1, либо до пункта i+2). Первую оплату можно сделать либо в первом пункте, либо во втором (на выбор). Если оплаты была произведена в предпоследнем (n-1) пункте, то можно просто доехать до конца шоссе, не оплачивая проезд в последнем пункте.
Зная стоимость проезда через определенный пункт оплаты, помогите роботу Сильверу найти наименьшую стоимость проезда через все шоссе, которую должен будет заплатить Сильвер, а также пункты оплаты, на которых ему необходимо будет остановиться.
Входные данные
В первой строке записано количество пунктов оплаты n (2 <= n <= 1000). Во второй строке записыны n целых чисел (costi) - стоимость проезда через i-й пункт оплаты (1 <= i <= n, 0 <= costi <= 999).
Выходные данные
Выведите в первой строке наименьшую стоимость проезда через шоссе.
Во второй строке выведите через пробел номера пунктов оплаты (по возрастанию), на которых роботу придется остановиться, чтобы оплатить проезд. Если вариантов маршрута с остановками в пунктах оплаты несколько, то выведите любой из них.
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
3
10 15 20 |
15
2 |
| 2 |
10
1 100 1 1 1 100 1 1 100 1 |
6
1 3 5 7 8 10 |
| |
|
1280/
396
|
|
Темы:
Динамическое программирование
Динамическое программирование: один параметр
Робот Сильвер движется по платному шоссе на планете Шелезяка. На каждом километре шоссе расположен пункт оплаты. Всего на шоссе n пунктов оплаты. Первый пункт оплаты находится в самом начале шоссе, n-й пункт оплаты находится в начале последнего километра шоссе. Заплатив нужную сумму в i-м пункте оплаты, робот может двигаться дальше либо до следующего пункта оплаты, либо же до того, который находится через 2 километра (то есть, если робот находится в пункте i, то он может двигаться либо до пункта i+1, либо до пункта i+2). Первую оплату можно сделать либо в первом пункте, либо во втором (на выбор). Если оплаты была произведена в предпоследнем (n-1) пункте, то можно просто доехать до конца шоссе, не оплачивая проезд в последнем пункте.
Зная стоимость, которую необходимо заплатить в определенном пункте оплаты, помогите роботу Сильверу найти наименьшую сумму, которую он заплатит, проехав через все шоссе.
Формат входных дынных
В первой строке записано количество пунктов оплаты n (2 <= n <= 1000). Во второй строке записыны n целых чисел (costi) - стоимость проезда через i-й пункт оплаты (1 <= i <= n, 0 <= costi <= 999).
Формат выходных дынных
Выведите одно число - ответ на задачу.
| |
|
1675/
850
|
|
Темы:
Динамическое программирование
Динамическое программирование: один параметр
Последовательность чисел Трибоначчи (Tn) определяется следующим образом:
T0 = 0,
T1 = 1,
T2 = 1, и Tn+3 = Tn + Tn+1 + Tn+2 при n >= 0.
Для заданного числа n, определите значение Tn.
Входные данные
Программа получает на вход натуральное число n (0 <= n <= 37). Ответ гарантированно укладывается в рамки 32-разрядного целого числа, т.е. ответ <= 231 - 1.
Выходные данные
Выведите значение Tn.
Попробуйте решить эту задачу без использования массивов и других структур данных! Другими словами, ваша программа должна использовать фиксированный объем памяти, не зависящий от входных данных (О(1)).
Примеры
| № |
Входные данные |
Выходные данные |
| 1 |
4 |
4 |
| 2 |
25 |
1389537 |
| |
|
1166/
613
|
|