Динамическое программирование - 1

A: Последовательности из 0 и 1 без двух единиц подряд

Вводится натуральное число N (до 50). Напишите программу, которая вычислит количество последовательностей длины N, состоящих из символов 0 и 1, в которых не встречается двух единиц подряд.

Например, для N=3 таких последовательностей 5:

000
001
010
100
101
Ввод Вывод
3
5

B: Последовательности из 0, 1 и 2 без двух двоек подряд

Вводится натуральное число N (до 50). Напишите программу, которая вычислит количество последовательностей длины N, состоящих из символов 0, 1 и 2, в которых не встречается двух двоек подряд.

Например, для N=2 таких последовательностей 8:

00
01
02
10
11
12
20
21
Ввод Вывод
2
8

C: Почти задача из ЕГЭ - 1

В Демо-версии ЕГЭ-2020 есть задача номер 22, которая звучит почти так:

Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:

Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя - это последовательность команд.

Сколько существует программ, для которых при исходном числе 1 результатом является число 20?

Участникам ЕГЭ нужно решить задачу для конкретных чисел на бумажке (там есть еще одно дополнительное условие). А мы с вами будем писать программу.

Вам вводится натуральное число N (не больше 50). Надо посчитать, сколько существует различных программ, которые из числа 1 получают число N.

Например, программ, которые из 1 получают число 5 - 4 штуки:

11111
2111
221
121
Ввод Вывод
5
4

D: Почти задача из ЕГЭ - 2

Вероятно, вы уже прочитали и решили предыдущую задачу. Если нет - начните с нее. Эта задача отличается дополнительным условием.

Вам вводится натуральное число N (не меньше 11, и не больше 50). Надо посчитать, сколько существует различных программ, которые из числа 1 получают число N, и при этом траектория вычислений не содержит число 10.
Траектория вычислений - это последовательность результатов выполнения всех команд программы. Например, для программы 121 (121 - это программа, то есть "+1", "*2", "+1") при исходном числе 1 траектория будет состоять из чисел 2, 4, 5.

Ввод Вывод
11
0
12
6
20
32

E: Собственно задача из ЕГЭ - 3

Вероятно, вы уже прочитали и решили две предыдущих задачи. Если нет - начните с них. Эта задача отличается дополнительным условием (которое есть в задаче ЕГЭ). Если в прошлой задече нам надобыло не пройти через 10, то здесь наоборот через него надо обязательно пройти.

Вам вводится натуральное число N (не меньше 11, и не больше 50). Надо посчитать, сколько существует различных программ, которые из числа 1 получают число N, и при этом траектория вычислений содержит число 10.

Ввод Вывод
11
14
12
14
20
28

F: Самый дешевый путь

На клеточках написаны натуральные числа. Лягушка находится в самой левой клетке и хочет попасть в самую правую. За один ход она может прыгнуть на одну, две или три клетки вправо (в первом случае из клетки X она попадет в клетку X+1, во втором X+2, в третьем X+3).

В каждой клетке, в которой она оказывается, она должна заплатить столько, сколько написано в этой клетке (в первой и последней клетке ей тоже надо платить). Заплатив какую наименьшую сумму она может допрыгать из левой клетки до правой?

В единственной строке вводится список натуральных чисел. В списке не больше 50 чисел.

Выведите одно число - сколько придется заплатить лягушке.

Ввод Вывод
1 3 5 25 25 4
10

G: Валютные махинации

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

У Пети есть 100 рублей. В каждый из дней он может обменивать валюты друг на друга по текущему курсу без ограничения количества (при этом курс доллара по отношению к евро соответствует величине, которую можно получить, обменяв доллар на рубли, а потом эти рубли — на евро). Поскольку Петя будет оперировать не с наличной валютой, а со счетом в банке, то он может совершать операции обмена с любым (в том числе и нецелым) количеством единиц любой валюты.

Напишите программу, которая вычисляет, какое наибольшее количество рублей сможет получить Петя к исходу N-го дня.

Законы изменения курсов устроены так, что в течение указанного периода рублевый эквивалент той суммы, которая может оказаться у Пети, не превысит 108 рублей.

Формат входных данных. Первая строка содержит одно число N (1<N<5000). В каждой из следующих N строк записано по 2 числа, вычисленных по Петиным законам для соответствующего дня — сколько рублей будет стоить 1 доллар, и сколько рублей будет стоить 1 евро. Все эти значения не меньше 0.01 и не больше 10000. Значения заданы точно и выражаются вещественными числами не более, чем с двумя знаками после десятичной точки.

Формат выходных данных. Выведите искомую величину с точностью не менее двух знаков после десятичной точки.

Ввод Вывод
4
1 10
10 5.53
5.53 1.25
6 5
4000.00

H: Последовательности из 0 и 1 без трех единиц подряд

Вводится натуральное число N (до 50). Напишите программу, которая вычислит количество последовательностей длины N, состоящих из символов 0 и 1, в которых не встречается трех единиц подряд.

Например, для N=3 таких последовательностей 7:

000
001
010
011
100
101
110
Ввод Вывод
3
7

I: Покупка билетов

За билетами на премьеру нового мюзикла выстроилась очередь из N человек, каждый из которых хочет купить 1 билет. На всю очередь работала только одна касса, поэтому продажа билетов шла очень медленно, приводя «постояльцев» очереди в отчаяние. Самые сообразительные быстро заметили, что, как правило, несколько билетов в одни руки кассир продаёт быстрее, чем когда эти же билеты продаются по одному. Поэтому они предложили нескольким подряд стоящим людям отдавать деньги первому из них, чтобы он купил билеты на всех.

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

Известно, что на продажу i-му человеку из очереди одного билета кассир тратит Ai секунд, на продажу двух билетов — Bi секунд, трех билетов — Ci секунд. Напишите программу, которая подсчитает минимальное время, за которое могли быть обслужены все покупатели.

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

Входные данные. Вводится сначала число N — количество покупателей в очереди (1≤N≤5000). Далее идет N троек натуральных чисел Ai, Bi, Ci. Каждое из этих чисел не превышает 3600. Люди в очереди нумеруются начиная от кассы.

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

Ввод Вывод
5
5 10 15
2 10 15
5 5 5
20 20 1
20 1 1
12
2
3 4 5
1 1 1
4