23.03 Количество программ из A в B где траектория вычислений содержит число(-а)
Ошибка.
Попробуйте повторить позже
Исполнитель Калькулятор преобразует число, записанное на экране.
У исполнителя есть команды, которым присвоены номера:
- Прибавить
- Прибавить
- Умножить на
Первая команда увеличивает число на экране на , вторая — на
, третья — удваивает число на
экране. Программа для исполнителя Калькулятор — это последовательность команд.
Сколько существует программ, для которых при исходном числе результатом является число
и при этом троектория содержит числа
и
? Траектория вычислений программы — это
последовательность результатов выполнения всех команд программы. Например, для программы
при исходном числе
траектория будет состоять из чисел
,
,
.
Решение динамикой
Для решения будем использовать динамический подход. Основная идея состоит в том, чтобы создать массив, где каждый индекс соответствует числу на экране, а значение в ячейке показывает количество программ, которые приводят к этому числу. Алгоритм строится по следующей логике:
1. Инициализируем массив длиной 25 (так как нам нужно число 24) нулями, чтобы каждая ячейка изначально содержала 0.
2. Устанавливаем a[4] = 1, потому что начальное число — 4, и существует ровно один способ быть в этом положении.
3. Проходим по всем числам от 5 до 24 включительно. Для каждого числа считаем количество
способов, которые его дают:
- Если можно применить команду «прибавить 1», добавляем значение ячейки a[i-1].
- Если можно применить команду «прибавить 5», добавляем значение ячейки a[i-5].
- Если число чётное, можно применить команду «умножить на 2» и добавить значение
a[i//2].
4. После подсчёта для числа проверяем, является ли оно обязательным для траектории
(числа 11 или 17). Если да, то обнуляем все предыдущие значения a[j] для
, так как
траектория должна содержать эти числа, и более ранние пути, которые не прошли через них, не
учитываем.
5. После завершения цикла в ячейке a[24] будет количество всех программ, которые удовлетворяют условиям задачи.
# Создаем массив из 25 элементов, изначально все нули a = [0] * 25 # Исходное число 4, существует один способ быть в этом состоянии a[4] = 1 # Перебираем все числа от 5 до 24 for i in range(5, 25): # Считаем количество программ для текущего числа # прибавление 1 # прибавление 5 # умножение на 2 (только для четных чисел) a[i] = a[i - 1] + a[i - 5] + a[i // 2] * (i % 2 == 0) # Проверяем обязательные числа траектории if i == 11 or i == 17: # Обнуляем все предыдущие значения, чтобы учесть # обязательное прохождение через это число for j in range(i): a[j] = 0 # Выводим количество программ, приводящих от 4 к 24 print(a[24])
Решение аналитически
Пусть — количество программ, которые число 4 преобразуют в число
. Тогда верно
следующее утверждение:
— если число не делится на 2.
— если число делится на 2.
Заполним таблицу по данным формулам до 11:
По условию траектория должна проходить через число 11, значит , так как
число 12 можно получить только из числа 11 (соблюдая траекторию). Заполним таблицу до
18:
Аналагично , так как число 19 можно получить только из 18, соблюдая траекторию.
Заполним таблицу до конца:
Отсюда получаем ответ: 72.
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!