Я имею дело с проблемой, которая очень похожа на проблему с изменениями монет.Динамическое программирование для примитивного калькулятора
Мне нужно реализовать простой калькулятор, который может выполнять следующие три операции с текущим числом x: умножить x на 2, умножить x на 3 или добавить 1 в x.
Цель дается натуральное число п, найти минимальное количество операций, необходимых для получения числа п, начиная с номера 1.
я сделал жадный подход к что BUR он показывает неправильные результаты
import sys
def optimal_sequence(n):
sequence = []
while n >= 1:
sequence.append(n)
if n % 3 == 0:
n = n // 3
elif n % 2 == 0:
n = n // 2
else:
n = n - 1
return reversed(sequence)
input = sys.stdin.read()
n = int(input)
sequence = list(optimal_sequence(n))
print(len(sequence) - 1)
for x in sequence:
print(x)
Например:
Input: 10
Output:
4
1 2 4 5 10
4 шага. Но правильный - 3 шага:
Output:
3
1 3 9 10
Я читал о динамическом программировании и надеюсь, что смогу реализовать его здесь. Но я не могу понять, как правильно использовать его в конкретном случае, может кто-нибудь дать мне совет?
Основная идея динамического программирования для повторного использования вещи, которые вы предварительно вычисленного позже. Есть ли способ, чтобы более короткие последовательности, которые уже были вычислены, могут помочь вам быстрее вычислить более длинные? – Aaron