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

"Июнь17" исполняет программу, которая изменяет число на экране. "Июнь17" имеет две команды с номерами: 1) Увеличить на 1. 2) Преобразовать в нечётное число. При выполнении первой команды число увеличивается на 1, а при выполнении второй команды число преобразуется в 2x + 1. Сколько существует программ, при которых исходное число 1 преобразуется в число 31, и при этом в траектории вычислений не встречается число 29?
Сонечка

Сонечка

Для решения данной задачи мы можем использовать метод динамического программирования.

Пусть \(dp[i]\) будет количество программ, при которых исходное число 1 преобразуется в число \(i\), и в траектории вычислений не встречается число 17.

Изначально у нас есть только одна программа, состоящая из команды 1, исходное число равно 1. Таким образом, \(dp[1] = 1\).

Затем мы можем перебирать все числа от 2 до 31 и для каждого числа \(i\) рассчитывать количество программ, преобразующих число 1 в число \(i\).

Для каждого числа \(i\) мы можем получить его из предыдущих чисел двумя способами:
1) Если \(i\) - нечётное число и \(i - 1\) не равно 17, то мы можем получить число \(i\) из числа \(i - 1\) с помощью команды 1. В этом случае \(dp[i]\) будет равно \(dp[i - 1]\), так как мы можем продолжать преобразовывать число \(i - 1\) до числа \(i\).
2) Если \(i\) - четное число и \(\frac{i}{2}\) не равно 17, то мы можем получить число \(i\) из числа \(\frac{i}{2}\) с помощью команды 2. В этом случае \(dp[i]\) будет равно \(dp[\frac{i}{2}]\), так как мы можем продолжать преобразовывать число \(\frac{i}{2}\) до числа \(i\).

Таким образом, мы можем использовать эти два способа для вычисления значения \(dp[i]\) для каждого числа \(i\) от 2 до 31.

Наконец, ответом на задачу будет значение \(dp[31]\), так как мы хотим узнать количество программ, при которых исходное число 1 преобразуется в число 31.

Давайте вычислим значения \(dp[i]\) для всех чисел \(i\) от 2 до 31.

\[
\begin{align*}
dp[2] &= dp[1] &\text{(число 2 получается из числа 1 с помощью команды 2)}\\
&= 1\\
dp[3] &= dp[2] + dp[1] &\text{(число 3 получается из числа 2 с помощью команды 1)}\\
&= 2\\
dp[4] &= dp[2] &\text{(число 4 получается из числа 2 с помощью команды 2)}\\
&= 1\\
dp[5] &= dp[4] + dp[3] &\text{(число 5 получается из числа 4 с помощью команды 1)}\\
&= 3\\
dp[6] &= dp[3] &\text{(число 6 получается из числа 3 с помощью команды 2)}\\
&= 2\\
dp[7] &= dp[6] + dp[5] &\text{(число 7 получается из числа 6 с помощью команды 1)}\\
&= 5\\
dp[8] &= dp[4] &\text{(число 8 получается из числа 4 с помощью команды 2)}\\
&= 1\\
dp[9] &= dp[8] + dp[7] &\text{(число 9 получается из числа 8 с помощью команды 1)}\\
&= 6\\
dp[10] &= dp[5] &\text{(число 10 получается из числа 5 с помощью команды 2)}\\
&= 3\\
dp[11] &= dp[10] + dp[9] &\text{(число 11 получается из числа 10 с помощью команды 1)}\\
&= 9\\
dp[12] &= dp[6] &\text{(число 12 получается из числа 6 с помощью команды 2)}\\
&= 2\\
dp[13] &= dp[12] + dp[11] &\text{(число 13 получается из числа 12 с помощью команды 1)}\\
&= 11\\
dp[14] &= dp[7] &\text{(число 14 получается из числа 7 с помощью команды 2)}\\
&= 5\\
dp[15] &= dp[14] + dp[13] &\text{(число 15 получается из числа 14 с помощью команды 1)}\\
&= 16\\
dp[16] &= dp[8] &\text{(число 16 получается из числа 8 с помощью команды 2)}\\
&= 1\\
dp[17] &= 0 &\text{(число 17 нельзя получить из других чисел без использования команды 1)}\\
dp[18] &= dp[9] &\text{(число 18 получается из числа 9 с помощью команды 2)}\\
&= 6\\
dp[19] &= dp[18] + dp[17] &\text{(число 19 получается из числа 18 с помощью команды 1)}\\
&= 6\\
dp[20] &= dp[10] &\text{(число 20 получается из числа 10 с помощью команды 2)}\\
&= 3\\
dp[21] &= dp[20] + dp[19] &\text{(число 21 получается из числа 20 с помощью команды 1)}\\
&= 9\\
dp[22] &= dp[11] &\text{(число 22 получается из числа 11 с помощью команды 2)}\\
&= 9\\
dp[23] &= dp[22] + dp[21] &\text{(число 23 получается из числа 22 с помощью команды 1)}\\
&= 18\\
dp[24] &= dp[12] &\text{(число 24 получается из числа 12 с помощью команды 2)}\\
&= 2\\
dp[25] &= dp[24] + dp[23] &\text{(число 25 получается из числа 24 с помощью команды 1)}\\
&= 20\\
dp[26] &= dp[13] &\text{(число 26 получается из числа 13 с помощью команды 2)}\\
&= 11\\
dp[27] &= dp[26] + dp[25] &\text{(число 27 получается из числа 26 с помощью команды 1)}\\
&= 31\\
dp[28] &= dp[14] &\text{(число 28 получается из числа 14 с помощью команды 2)}\\
&= 5\\
dp[29] &= dp[28] + dp[27] &\text{(число 29 получается из числа 28 с помощью команды 1)}\\
&= 36\\
dp[30] &= dp[15] &\text{(число 30 получается из числа 15 с помощью команды 2)}\\
&= 16\\
dp[31] &= dp[30] + dp[29] &\text{(число 31 получается из числа 30 с помощью команды 1)}\\
&= 52\\
\end{align*}
\]

Итак, количество программ, при которых исходное число 1 преобразуется в число 31 без появления числа 17 в траектории вычислений, равно 52.

Надеюсь, этот подробный ответ помог вам понять решение задачи!
Знаешь ответ?
Задать вопрос
Привет!
hello