この割り当ては、1を加算し、2を掛けて3を掛けることができるプリミティブ計算機への動的プログラミングアプローチを実現することを目的としています。したがって、nの入力では、 n。私は非常に純粋なdpを実装している、あるいは私はdpのアプローチだと思います。それは動作していません。誰にも質問する人はいません。 n = 5の入力に対しては、([0,1,2,2,3,4]、[1,1,2,3,4,5])の出力は以下のようになります。リスト番号= [1,2,4,5]または[1,3,4,5]である。助けていただければ幸いです。 elif
ブロックは本当にif
ブロックでなければならないこと動的プログラミング - プリミティブ計算機Python
def DPmin_operations(n):
numbers = []
minNumOperations = [0]*(n+1)
numOps = 0
numbers.append(1)
for k in range(1,n+1):
minNumOperations[k] = 10000
# for *3 operator
if k % 3 == 0:
numOps = minNumOperations[k//3] + 1
if numOps < minNumOperations[k]:
minNumOperations[k] = numOps
numbers.append(k)
# for *2 operator
elif k % 2 == 0:
numOps = minNumOperations[k//2] + 1
if numOps < minNumOperations[k]:
minNumOperations[k] = numOps
numbers.append(k)
# for + 1 operator
elif k >= 1:
numOps = minNumOperations[k - 1] + 1
if numOps < minNumOperations[k]:
minNumOperations[k] = numOps
numbers.append(k)
return (minNumOperations, numbers)
コードにいくつかのコメントを追加して、自分がしようとしていることを簡単に解釈できるようにすることを検討します。あるいは、なぜあなたのコードを作成したのかという背後にある考え方を少なくとも説明してください。おそらくあなたはそれをどのように解決したいかを見るのが簡単になります。 – TheBoro
次の点を確認してください:http://stackoverflow.com/a/36930764/1291716 – Sayakiss