Project Euler 67

プロジェクトオイラー
http://projecteuler.net/index.php

Q67.
与えられた三角形状に配置された数を上から辿ったときの総和の最大

上から順に数字に総和の最大をつけていく。
本当は再帰で書きたいがうまくいかない。



file = open("triangle.txt")
a = map(lambda s: map(int, s.split(' ')), file.readlines())
file.close()

def max_sum(a, b, n, m):
if n == 0:
return a[0][0]
elif m == 0:
return a[n][m] + b[n-1][m]
elif m == n:
return a[n][m] + b[n-1][m-1]
else:
return a[n][m] + max(b[n-1][m], b[n-1][m-1])

b = [ ]
for n in range(len(a)):
b.append(map(lambda m: max_sum(a, b, n, m), range(n + 1)))
print max(b[n])