Python 欧拉问题67不太正确
我有以下Python代码,是我为姐妹问题18编写的 它非常适合,但有点不适合。我一辈子都不知道为什么Python 欧拉问题67不太正确,python,Python,我有以下Python代码,是我为姐妹问题18编写的 它非常适合,但有点不适合。我一辈子都不知道为什么 triangle = [ [59], [73, 41], [52, 40, 9], [26, 53, 6, 34], [10, 51, 87, 86, 81], [61, 95, 66, 57, 25, 68], ... ] def max_adjacent(row,col): return max(triangle[row][col]+triangle[(row+1)][col],
triangle = [
[59],
[73, 41],
[52, 40, 9],
[26, 53, 6, 34],
[10, 51, 87, 86, 81],
[61, 95, 66, 57, 25, 68],
...
]
def max_adjacent(row,col):
return max(triangle[row][col]+triangle[(row+1)][col], triangle[row][col]+triangle[(row+1)][(col+1)])
if __name__ == '__main__':
row = len(triangle)-2
while row >= 0:
triangle[row] = [max_adjacent(row,triangle[row].index(i)) for i in triangle[row]]
row -= 1
print(triangle[0][0])
该算法从最后一行开始,将该行中的每个数字替换为自身加上下一行中最大的相邻数字。(例如,在上面部分定义的三角形中,最后一行中的10
,但其中一行将被替换为105
)它只需循环该行,直到它位于三角形顶部的第0行,并打印出该行的第一个元素,即现在的最大和
这给出了7220
的答案,我知道答案很接近,但错了。我想知道为什么它对问题18有效
有人能看出我的假设或做错了什么吗?问题可能是您正在使用
index
函数。如果一行中有两个数字,index
将始终为您提供该数字第一次出现的索引
我猜问题18在一行内没有重复项,而当前的问题有。此代码可能会有所帮助。使用DP的概念在java中完成
public static int max(int a,int b)
{
return a>=b?a:b;
}
public static int maxSumPath(int a[][],int cacher[][],int r,int k)
{
if(r==100)
return 0;
else if(cacher[r][k]!=0)
{
return cacher[r][k];
}
else
{
cacher[r][k] = cacher[r][k] + max(maxSumPath(a,cacher,r+1,k),maxSumPath(a,cacher,r+1,k+1)) + a[r][k];
return cacher[r][k];
}
}