我正在解决Project Euler的一个问题,这个代码适用于15个级别的树中最大的路径和。现在我遇到了100个级别的问题,我的代码似乎返回了一个9的答案。我没有把树放到这里,因为问题似乎严格地在代码中。有人可以帮忙吗?
def compressLines(n):
start = time.time()
t = n
while t != 0:
p = (r[t-1].split())
s = (r[t].split())
g = []
for i in range(0,len(p)):
f = int(p[i]) + int(s[i])
u = int(p[i]) + int(s[i+1])
if f > u:
p[i] = f
if f < u:
p[i] = u
del r[-2:]
string = ""
for i in p:
string+=(" "+str(i))
r.append(string)
t = t-1
print r, "solved in", time.time() - start, "seconds"
这给了我一个答案(['7264']在0.0369999408722秒内解决了),当正确答案是7273时。
为了使代码更容易阅读,我将“p”定义为倒数第二行,将“s”定义为每次代码运行时的最后一行。代码本质上做的是将最后一行压缩到它上面的那一行,在每种情况下产生最大的总和,一旦达到最终答案就停止。有谁能发现问题?
答案 0 :(得分:1)
您不会考虑两条路径具有相同权重的情况:
if f > u:
p[i] = f
if f < u:
p[i] = u
f == u
时,您未更新p[i]
。