Python 正确的代码但错误的ans:(

Python 正确的代码但错误的ans:(,python,Python,我正在用Python解决问题 我已经成功地解决了这里给出的示例问题,但未能解决主要问题。但是代码是相同的 代码是: matrix = [('75', '0'), ('95', '64'), ('17', '47', '82'), ('18', '35', '87', '10'), ('20', '04', '82', '47', '65'), ('19', '01', '23', '75', '03', '34'), ('88', '02', '7

我正在用Python解决问题

我已经成功地解决了这里给出的示例问题,但未能解决主要问题。但是代码是相同的

代码是:

matrix = [('75', '0'),
    ('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')]

i = 0
j = 0
len = len(matrix )
sum = 0

for i in range(0,len):

    if matrix [i][j] > matrix [i][j + 1]:
        print matrix [i][j]
        sum = sum + int(matrix [i][j])
    else:
        print matrix [i][j+1]
        j = j + 1
        sum = sum + int(matrix [i][j])
print sum

谁能告诉我哪里弄错了吗?

对不起,您使用的算法不正确。
您使用的是a,但正确的算法是。主要区别在于贪婪选择当前最佳选项作为选项,而动态规划枚举所有可能的选项并生成一系列选项

有一种简单的情况下,您的解决方案(贪婪)会失败:

0,  
1, 0,  
0, 0, 10  
最好的结果是10,但您的算法会给出1

自己想一想,然后尝试寻找关于动态规划的信息。 欧拉计划是一个很棒的地方,当你想出一个解决方案的时候,感觉非常棒。所以我现在就不多说了。:)

更新:

但问题是:从下面三角形的顶部开始,移动到下面一行的“相邻数字”。我已经根据这个词编写了代码。对不起打断一下,你能把这个词说得更清楚些吗

请注意,在给定的
n
水平三角形上实际上会有
2^(n-1)
可能的路线。在原始问题中,
最大总数
表示所有这些路线中的最大总数。
您的代码在
所有
路线中找不到最大值,因为您在任何步骤的
两个
选择中只选择了一个更好的路线

再次更新:

实际上,在这个问题中,由于
n=15
足够小,您还可以枚举所有
2^(n-1)=16384
可能的路由,汇总每个路由的总值,最后得到所有路由中的最大值。但是,在问题中,问题大小
n
增加到100,并且不可能枚举所有
2^(n-1)=63382530014114700748351602688
路线

顺便说一句,我已经发布了一个链接到动态编程的wiki页面,但我担心作为初学者阅读它太复杂了。很抱歉。

但是别担心,只要谷歌一下,你就会看到很多有用的资源:)

对不起,你使用的算法不正确。
您使用的是a,但正确的算法是。主要区别在于贪婪选择当前最佳选项作为选项,而动态规划枚举所有可能的选项并生成一系列选项

有一种简单的情况下,您的解决方案(贪婪)会失败:

0,  
1, 0,  
0, 0, 10  
最好的结果是10,但您的算法会给出1

自己想一想,然后尝试寻找关于动态规划的信息。 欧拉计划是一个很棒的地方,当你想出一个解决方案的时候,感觉非常棒。所以我现在不多说了。:)

更新:

但问题是:从下面三角形的顶部开始,移动到下面一行的“相邻数字”。我已经根据这个词编写了代码。对不起打断一下,你能把这个词说得更清楚些吗

请注意,在给定的
n
水平三角形上实际上会有
2^(n-1)
可能的路线。在原始问题中,
最大总数
表示所有这些路线中的最大总数。
您的代码在
所有
路线中找不到最大值,因为您在任何步骤的
两个
选择中只选择了一个更好的路线

再次更新:

实际上,在这个问题中,由于
n=15
足够小,您还可以枚举所有
2^(n-1)=16384
可能的路由,汇总每个路由的总值,最后得到所有路由中的最大值。但是,在问题中,问题大小
n
增加到100,并且不可能枚举所有
2^(n-1)=63382530014114700748351602688
路线

顺便说一句,我已经发布了一个链接到动态编程的wiki页面,但我担心作为初学者阅读它太复杂了。很抱歉。


但是不要担心,只要谷歌,你就会看到很多有用的资源:)

请在这里发布代码,问题应该是自包含的。另外:请描述您期望的答案以及您得到的结果。我猜您的算法完全错误,只是在样本数据上意外地起作用。我将从底部开始计算过程。我得到的总数是1064,我希望是ans。但它不正确?
len
对于标识符来说是一个错误的选择,因为它是Python内置的(您使用过的)。请在这里发布代码,问题应该是独立的。另外:请描述您期望的答案以及您得到的答案。我猜您的算法完全错误,只是在样本数据上意外地起作用。我将从底部开始计算过程。我总共得到1064个答案,我期望这个答案。但它不正确?
len
是一个错误的标识符选择,因为它是Python内置的(您已经使用过)。感谢您的回答:)我感谢您的回答。但是问题:从下面三角形的顶部开始,移动到下面一行的“相邻数字”。我已经根据这个词编写了代码。对不起打断一下,你能把这个词说得更清楚些吗?还有它的用途@莫希塔法勒作为非母语人士,我为我糟糕的英语写作道歉。。我将尝试编辑原始答案以添加一些更新。啊!很好!谢谢。我很高兴:D@MohitAphale很高兴能帮助你:)@Pengyu CHEN Ohhh okie!我明白你的意思。我只是迭代了最大相邻值,但我也可以通过另一个值达到最大总值。谢谢你的帮助。必须迭代所有可能的相邻值,然后放入最大总数。我会浏览你提供的链接。谢谢你的回复:)我感谢你。但是