[英]Wrong output in finding the maximum sum of adjacent digits in a pyramid/triangle
我在 Project Euler 上解决了问题 18,并为它编写了如下代码:
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
。 这里有什么问题?
您假设最佳路径将始终通过具有最大值的孩子向下移动,但事实并非如此。 具有较小值的子节点可能会打开(在较低层)找到更大值的可能性,这足以弥补暂时不太理想的值。
因此,您的算法在第一次迭代中将 go 从 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
上方的行提出相同的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.