私は数ヶ月前にプロジェクトオイラーの問題67を非常に非効率的なアルゴリズムで解決しました。今日、私はこれがどのように改善されたのかを理解し、より効率的なアルゴリズムを作成しようとしているときに、いくつかの問題に遭遇しました。
コードは次のとおりです。
r_prev = [59,0,0]
r_load = [73,41,0]
r = [0,0,0]
zero_r = [0,0,0]
rows = 3
while rows != 0:
position = 0
for x in r_load:
try:
if r_prev[position] > r_prev[position-1]:
r[position] = r_prev[position] + r_load[position]
else:
r[position] = r_prev[position-1] + r_load[position]
except IndexError:
r[position] = r_prev[position] + r_load[position]
position += 1
print r
rows -= 1
r_load = input("Enter next row")
r_prev = r
r_prev.append(0)
zero_r.append(0)
r = zero_r
ポイントに到達するための最高のパスの合計のみを保持することによって機能します。この時点で(コンソールを介して)手動で入力をフィードしています。最初の行にフィードすると期待どおりに実行されますが、2番目の行にフィードすると、とを同じものと見なし、で実行されるすべての操作もでr_prev
実行されます。r
r_prev
r
この問題を解決するにはどうすればよいですか?