swf:
Решение.
Вначале разберёмся с командой умножения на 3, которой не было в задаче про лестницу.
Её можно применить ровно один раз – получить 9 из 3. 3 * 4 = 12, перескакиваем через число 9, которое должно присутствовать в траектории. Запомним, что 9 можно получить из 3 1 способом с помощью команды 2.
Получили задачу получения 14 из 3 с помощью команд +1 и +2, и чтобы в траектории была 9. Разделим эту задачу на две подзадачи.
Подзадача 1, получение числа 9 из числа 3
Задача совершенно аналогична задаче про лестницу.
Только там мы начинали с пола (0-й ступеньки), а здесь начинаем с 3-й ступеньки.
K(i) = K(i–2) + K(i–1), i >= 6.
K(4) = 1, K(5) = 2.
Поэтому таблица выглядит так:
K(4) | K(5) | K(6) | K(7) | K(8) | K(9) |
---|
1 | 2 | 3 | 5 | 8 | 13 |
---|
Итого 1 + 13 = 14 способов получения числа 9.
Подзадача 2, получение числа 14 из числа 9
Пусть мы уже находимся на 9-й ступеньке, неважно, как мы туда попали.
К слову, это очень важное свойство нашей задачи! Нам не нужно помнить, как мы попали в текущее состояние. Если бы это было не так (система имела последействие), то задачу нельзя было бы решать методом динамического программирования.
K(i) = K(i–2) + K(i–1), i >= 12.
K(10) = 1, K(11) = 2.
Таблица:
K(10) | K(11) | K(12) | K(13) | K(14) |
---|
1 | 2 | 3 | 5 | 8 |
---|
Итого 8 способов набрать 14, начиная с 9 и используя команды +1 и +2.
Теперь соединяем решения обеих подзадач в одно: с 3-й ступеньки попасть на 9-ю можно 14 способами, с 9-й ступеньки подняться на 14-ю можно 8 способами.
Итого 14 * 8 = 112 способов (программ).
Ответ: 112 .
https://forum.sources.ru/index.php?showtopic=419207&view=findpost&p=3834827