Предмет: Информатика,
автор: au456
К начальному числу единице можно прибавить единицу, умножить на два, умножить на три. На каждом последующем шаге можно выполнять только эти три операции. Определить за какое минимальное число шагов можно достичь произвольно введенного числа N.
До предела умножать на три , потом на два и добавлять единицами не оптимальный к сожалению алгоритм.
Нужна либо формула, либо алгоритм (словами ! ) , либо программа на Питон.
Ответы
Автор ответа:
5
N = int(input())
dp = [100000000 for i in range(N + 2)]
dp[1] = 0
for i in range(2, N + 1):
dp[i] = dp[i - 1] + 1
if i % 2 == 0 and dp[i // 2] != 100000000:
dp[i] = min(dp[i], dp[i // 2] + 1)
elif i % 3 == 0 and dp[i // 3] != 100000000:
dp[i] = min(dp[i], dp[i // 3] + 1)
print(dp[N])
m5k1c:
Возможно код покажется сложным, но он работает. Реализовано с помощью метода динамического программирования
Пожалуйста помогите хорошие люди
а) Определите растворимость кристаллогидрата сульфата меди (CuSO4 • 5 H2O) при...
https://znanija.com/task/43156934?utm_source=android&utm_medium=share&utm_campaign=question
Похожие вопросы
Предмет: Другие предметы,
автор: Janara22
Предмет: Математика,
автор: Амми
Предмет: История,
автор: Куся000
Предмет: Математика,
автор: русиум
Предмет: Математика,
автор: машацитрус