Исполнитель А16 преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера: 1. Прибавить 1 2. Пр...
Условие:
Исполнитель А16 преобразует число, записанное на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 2
3. Умножить на 2
Первая из них увеличивает число на экране на 1, вторая увеличивает его на 2, третья умножает его на 2.
Программа для исполнителя А16 – это последовательность команд.
Сколько суще
Решение:
Сколько существует программ, которые преобразуют число 3 в число 10?
Для решения этой задачи можно использовать метод динамического программирования. Мы можем рассмотреть все возможные программы, которые преобразуют число 3 в число 10, и посчитать их количество.
Пусть dp[i] будет количество программ, которые преобразуют число i в число 10. Тогда мы можем выразить dp[i] через значения dp[i-1], dp[i-2] и dp[i/2], так как каждая команда может быть применена к числу i-1, i-2 или i/2.
Исходя из этого, мы можем записать следующее рекуррентное соотношение:
dp[i] = dp[i-1] + dp[i-2] + dp[i/2]
Начальные значения для dp[3] и dp[4] равны 1, так как существует только одна программа, которая преобразует число 3 в число 10 (последовательность команд 3-1-1-1-1-1-1-1-1-1) и только одна программа, которая преобразует число 4 в число 10 (последовательность команд 4-2-2-2-2-2).
Используя это рекуррентное соотношение, мы можем вычислить dp[10]:
dp[10] = dp[9] + dp[8] + dp[5] = dp[8] + dp[7] + dp[4] + dp[7] + dp[6] + dp[3] = dp[7] + dp[6] + dp[4] + dp[6] + dp[5] + dp[2] + dp[6] + dp[5] + dp[3] = dp[6] + dp[5] + dp[3] + dp[5] + dp[4] + dp[1] + dp[5] + dp[4] + dp[2] + dp[5] + dp[4] + dp[1] + dp[4] + dp[3] = dp[5] + dp[4] + dp[2] + dp[4] + dp[3] + dp[0] + dp[4] + dp[3] + dp[1] + dp[4] + dp[3] + dp[0] + dp[3] + dp[2] + dp[1] + dp[4] + dp[3] + dp[0] + dp[3] + dp[2] + dp[1] + dp[0] = 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 = 14
Таким образом, существует 14 программ, которые преобразуют число 3 в число 10.