Python

Решите с помощью языка программирования Python!

Егэ 23 задание
Алекс Dj Cj
Алекс Dj Cj
97
Такие задачи решаются "в лоб" динамическим программированием.

t = [0 for _ in range(15)] # t[i] - кол-во траекторий до числа i
t[2] = 1 # начало всех траекторий
# Кол-во траекторий до чисел 3..6
for i in range(3, 7): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
# Удаляем траектории, не проходящие через 6
for i in range(2, 6): t[i] = 0
# Кол-во траекторий до чисел 7..9
for i in range(7, 10): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
# Удаляем траектории, не проходящие через 9
for i in range(6, 9): t[i] = 0
# Кол-во траекторий до чисел 10..14
for i in range(10, 15): t[i] = t[i - 1] + t[i - 3] + (0 if i % 2 else t[i // 2])
print(t[14])
Женисбек Омаров
Женисбек Омаров
64 363
Лучший ответ
Искомое количество программ равно произведению количества программ, получающих из числа 2 число 8, на количество программ, получающих из числа 8 число 10, и на количество программ, получающих из числа 10 число 12.

Будем решать задачу с конца. Число 12 из числа 10 можно получить двумя способами (10+1+1; 10+2). Число 10 из числа 8 можно получить двумя способами (8+1+1; 8+2). Остается узнать количество способов получения числа 8 из числа 2. Начнем свои рассуждения с числа 3, т. к. двойка это начальное число. Тройку можно получить только одним способом – прибавив 1. Четверку получим двумя способами – прибавив единицу к тройке или добавив двойку к двойке и т. д. Запишем эти рассуждения в следующем виде:

R(2) = 1

R(3) = R(2) = 1

R(4) = R(3) + R(2) = 2

R(5) = R(4) + R(3) = 2 + 1 = 3

R(6) = R(5) + R(4) + R(2) = 3 + 2 + 1 = 6

R(7) = R(6) + R(5) = 6 + 3 = 9

R(8) = R(7) + R(6) = 9 + 6 = 15

Таким образом, количество программ, удовлетворяющих условию задачи, равно R(2) * R(8) * R(10) * R(12) = 1 * 15 * 2 * 2 = 60.

Ответ: 60.
Игорь !
Игорь !
6 950
Алекс Dj Cj В сборнике ответ 40