まず、これが問題です: https://projecteuler.net/problem=82。これは私のコードです:
# https://projecteuler.net/problem=82
matrice = open('matrix3.txt','r').read().split('\n')
m = []
for el in matrice:
if el=='':
continue
tmp = el.split(',')
m.append(tmp)
matrix = [[0 for i in range(80)]for j in range(80)]
x,y = 0,0
while(True):
matrix[x][y]=int(m[x][y])
y+=1
if y==80:
y=0
x+=1
if x==80:
break
tmp = [0]*80
x,y = 0,78
while(True):
if x==0:
tmp[x]=min(matrix[x][y+1],matrix[x+1][y]+matrix[x+1][y+1])
if x==79:
tmp[x]=min(matrix[x][y+1],matrix[x-1][y]+matrix[x-1][y+1])
else:
tmp[x]=min(matrix[x][y+1],matrix[x-1][y]+matrix[x-1][y+1],matrix[x+1][y]+matrix[x+1][y+1])
x+=1
if x==80:
for e in range(80):
matrix[e][y]+=tmp[e]
tmp = [0]*80
x=0
y+=-1
if y<0:
break
minimo = 10**9
for e in range(80):
if matrix[e][0]<minimo:
minimo=matrix[e][0]
print(minimo)
このコードの背後にある考え方は次のとおりです。79 番目の列 (0 からカウントを開始する場合は 78 番目) から開始し、その列の特定のエントリから右の列に到達するための最良の (最小限の) 方法を計算します。コラムが終わったら、見つけた最小限の結果に置き換え、左側のコラムで同じことを始めます。
なぜ私が間違った答えを得たのかを理解するのを手伝ってくれる人はいますか? (私は 262716 を受け取ります)
例の行列に対して同じコードが機能します (もちろん、インデックスを変更すると機能します)。