Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- fh = open(sys.argv[1])
- rows = [map(int, line.split()) for line in fh.readlines()]
- cache = {}
- def max_sum(level=0, index=0):
- try:
- return cache[(level,index)]
- except:
- pass
- try:
- assert index >= 0
- n = rows[level][index]
- except:
- result = 0
- else:
- next_level = level+1
- result = n + max(max_sum(next_level, index),
- max_sum(next_level, index+1),
- )
- cache[(level,index)] = result
- return result
- print max_sum()
- print 'cache size', len(cache)
- def _reduce(level=len(rows)-1):
- #print
- #print 'level', rows[level]
- if len(rows) <= 1:
- return rows[0][0]
- level_above = level-1
- for index, _ in enumerate(rows[level_above]):
- #print 'index', index
- l = max(0, index)
- r = min(index+2, len(rows[level]))
- #print 'range', l, '-', r
- sub_max = max(rows[level][l:r])
- #print 'sub_max', sub_max
- rows[level_above][index] += sub_max
- #print 'level above', rows[level_above]
- del rows[level]
- return _reduce(level_above)
- print _reduce()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement