编程挑战帮助(python)?

编程挑战帮助(python)?,python,algorithm,Python,Algorithm,我正在努力解决欧拉计划的问题。我有,但不正确 tri = '''\ 75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 4

我正在努力解决欧拉计划的问题。我有,但不正确

tri = '''\
    75
    95 64
    17 47 82
    18 35 87 10
    20 04 82 47 65
    19 01 23 75 03 34
    88 02 77 73 07 63 67
    99 65 04 28 06 16 70 92
    41 41 26 56 83 40 80 70 33
    41 48 72 33 47 32 37 16 94 29
    53 71 44 65 25 43 91 52 97 51 14
    70 11 33 28 77 73 17 78 39 68 17 57
    91 71 52 38 17 14 91 43 58 50 27 29 48
    63 66 04 68 89 53 67 30 73 16 69 87 40 31
    04 62 98 27 23 09 70 98 73 93 38 53 60 04 23'''
sum = 0
spot_index = 0

triarr = list(filter(lambda e: len(e) > 0, [[int(nm) for nm in ln.split()] for ln in tri.split('\n')]))
for i in triarr:
    if len(i) == 1:
        sum += i[0]
    elif len(i) == 2:
        spot_index = i.index(max(i))
        sum += i[spot_index]
    else:
        spot_index = i.index(max(i[spot_index],i[spot_index+1]))
        sum += i[spot_index]

print(sum)

当我运行程序时,它总是有点偏离正确的总和/输出值。我很确定这是一个算法问题,但我不知道如何准确地解决它,也不知道解决原始问题的最佳方法是什么。

您的算法是错误的。考虑一下底线上是否有1000000个大数字。您的算法可能遵循一条根本找不到的路径

这个问题暗示了这个问题可能是野蛮的,但也有一个更聪明的方法来解决它

不知何故,你的算法需要考虑所有可能的路径/求和。< /P> 蛮力的方法是从上到下逐一尝试


这个聪明的方法使用了一种叫做动态规划的技术。我会让你想出一个方法来编码它

从下面两行开始。在下一行到下一行的每个元素上,通过添加与下一行到下一行的当前元素对应的下一行的两个元素中的最大值,计算出如果到达该元素时的总和。例如,给定上面的示例,下一行最左边的元素是63,如果您到达该元素,您肯定会选择其右边的子元素62。因此,您可以将下一行的63替换为63+62=125。对下一行的每个元素执行相同的操作;您将获得1251641029511212316128166 10911214710054。现在删除最下面一行,并在缩小的三角形上重复


还有一种自上而下的算法,与上面给出的算法是双重的。我也会让你弄明白的。

将代码粘贴到这里。仅在外部链接中使用代码的问题是不允许的。您的算法如何找到最佳路径?看起来它只是从顶部向下跟随最大的数字。从底部开始