Python 查找金字塔/三角形中相邻数字的最大和时输出错误

Python 查找金字塔/三角形中相邻数字的最大和时输出错误,python,python-3.x,algorithm,data-structures,dynamic-programming,Python,Python 3.x,Algorithm,Data Structures,Dynamic Programming,我已经解决并编写了如下代码: v = '''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

我已经解决并编写了如下代码:

v = '''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'''.strip().split('\n')


last_ind = 0
max_sum = 75
for row in v[1:]:
    row = row.split(' ')
    num1 = int(row[last_ind])
    num2 = int(row[last_ind+1])
    if num1 > num2:
        max_sum+=num1
    else:
        max_sum+=num2
        last_ind = last_ind+1
        
print(max_sum)    

我得到的答案是1064,但到处都写着
1074
。有人能告诉我我可能做错了什么吗。通过手工计算每一行,我得到
1064
。这里出了什么问题?

您假设最优路径总是通过具有最大值的子路径向下移动,但这不是真的。具有较小值的子对象可能会(在较低的层)找到一个更大的值,这远远超过了对暂时的较不理想值的补偿

所以你的算法,在第一次迭代中,第二行的值是75到95。但事实证明,这是一个错误的选择。你得想出一个更好的算法。你会在关于这一特殊挑战的其他问答中找到灵感,比如

在这里您可以看到最佳路径:

路径 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
假设您在最下面一行的前面,将其称为row
l
。现在,对于第
l
行的每个数字
m
,询问(1)下一个选择(一个或两个)中的哪一个是最佳选择?(2) 如果我们添加了这个最佳选择,那么
m
的总和现在会是什么样子

现在就在
l
上方的那一行问同样的问题