三角形下相邻路径的最大总和

时间:2014-12-12 20:27:09

标签: python

我正在努力应对以下挑战:

https://www.codeeval.com/open_challenges/89/

我的解决方案:

import sys
test_cases = open(sys.argv[1], 'r')
sum_track=0
index_track = 0
for test in test_cases:
    test = test.split()
    test = [int(x) for x in test]
    max_num =  max([test[max([0,index_track])],test[min([len(test)-1,index_track+1])]])
    print "adding " +str(max_num) # this line helps "track" my path through the triangle
    sum_track+= max_num
    index_track = test.index(max_num)

test_cases.close()

print sum_track

作为参考,这是正在测试的“三角形”:

http://www.yodlecareers.com/puzzles/triangle.txt

我得到665321作为总和,这是不正确的。我已经尝试检查上面的代码打印输出文件的步骤,对于前10行似乎是正确的,显然我不会手动完成整个事情。有没有人曾经在这个挑战中工作过?

2 个答案:

答案 0 :(得分:3)

考虑这样的三角形:

       1
    2     3
99     4     5

您的算法将“贪婪”地遵循它看到的最大数字并最终找到1+3+5。显然这不是最大的总和,因为它忽略了三角形中明显的99

答案 1 :(得分:1)

这很简单,可以使用动态编程完成。但是您必须从叶子(示例中的第4行)开始评估,而不是从根节点开始评估,然后向后工作。所以倒三角形是

0 7 1 5
4 6 8
9 6
5

现在通过递归解决, f(row,col) = max(f(row-1,col), f(row-1,col+1)),边界条件为f(0, col) = value(0, col)。终止于最后一行