Задача к ЕГЭ по информатике на тему «количество программ из a в b смешанное» №3

Исполнитель преобразует число на экране.

У исполнителя есть три команды, которым присвоены номера:

1.Прибавить 1

2.Умножить на 2

3. Прибавить 3

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

Программа для исполнителя КотьКоть — это последовательность команд.

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

Решение рекурсией:

def F(x, y):
    if x == y:
        return 1
    if x > y or x == 14:
        return 0
    return F(x + 1, y) + F(x + 3, y) + F(x * 2, y)


print(F(1, 9) * F(9, 20))

Решение динамикой:

a = [0] * (9 + 1)  # Создаем ячейки до обязательного числа включительно
a[1] = 1  # Задаём начало в числе 1
for i in range(2, 9 + 1):
    if i % 2 == 0:
        # В текущее число i можно попасть командой +1 и *2 и +3
        a[i] = a[i - 1] + a[i // 2] + a[i - 3]
    else:
        a[i] = a[i - 1] + a[i - 3]

b = [0] * (20 + 1)  # Создаем ячейки до конечного числа включительно
b[9] = 1  # Задаём начало в числе 5
for i in range(10, 20 + 1):
    if i == 14:
        continue
    if i % 2 == 0:
        # В текущее число i можно попасть командой +1 и *2 и +3
        b[i] = b[i - 1] + b[i // 2] + b[i - 3]
    else:
        b[i] = b[i - 1]  + b[i - 3]
print(a[9]*b[20])

Ответ: 741
Оцените статью
Я решу все!