Исполнитель РазДваТри преобразует число на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на 2
3. Умножить на 3
Первая команда увеличивает число на экране на 1, вторая умножает его на 2, третья умножает на 3.
Программа для исполнителя РазДваТри - это последовательность команд.
Сколько существует про-
гр
Программ для исполнителя РазДваТри, которые преобразуют число на экране?
Для решения этой задачи можно использовать метод динамического программирования. Предположим, что нам нужно преобразовать число n на экране.
Создадим массив dp размером n+1, где dp[i] будет хранить количество программ, которые преобразуют число i на экране.
Инициализируем dp[0] = 1, так как единственная программа, которая может преобразовать число 0, это пустая программа.
Затем, для каждого числа i от 1 до n, мы будем обновлять значение dp[i] следующим образом:
dp[i] = dp[i-1] + dp[i/2] + dp[i/3]
Первое слагаемое dp[i-1] соответствует применению первой команды (прибавление 1), второе слагаемое dp[i/2] соответствует применению второй команды (умножение на 2), третье слагаемое dp[i/3]...