我正在處理的問題,這是非常類似於更改硬幣的問題。原始計算器的動態編程
我需要實現一個簡單的計算器,它可以用當前數字x執行以下三個操作:乘以x乘以2,乘以x乘以3或給x加1。
目標被賦予一個正整數n,發現以獲得從1
我製成的貪婪方法,該編號開始的數量n所需的操作的最小數量,伯爾它顯示不正確的結果
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