fork download
  1. import random
  2. data = [random.randint(0, 300) for _ in range(100000)]
  3.  
  4. k = 3
  5. cache = [(0, -1)] * (len(data) + 2*k + 1)
  6. for i in range(len(data) - 1, -1, -1):
  7. maxSum, maxNext = max(map(lambda i: (cache[i][0], i), list(range(i + k, i + 2*k))),
  8. key = lambda v: v[0])
  9. cache[i] = (maxSum + data[i], maxNext)
  10.  
  11. maxSum, maxStart = max(map(lambda i: (cache[i][0], i), list(range(0, k))),
  12. key = lambda v: v[0])
  13.  
  14. print(maxSum)
  15. maxList = []
  16. now = maxStart
  17. while True:
  18. maxList.append(now)
  19. next = cache[now][1]
  20. if next < 0:
  21. break
  22. now = next
  23.  
  24. print(maxList[0:50]) #иначе ругается на слишком длинный вывод
Success #stdin #stdout 0.4s 26504KB
stdin
Standard input is empty
stdout
6354431
[1, 4, 7, 10, 13, 16, 19, 24, 27, 30, 34, 37, 40, 43, 46, 50, 54, 57, 61, 64, 67, 70, 73, 76, 79, 82, 85, 89, 92, 95, 99, 102, 105, 109, 112, 115, 118, 121, 124, 127, 131, 136, 139, 142, 145, 150, 153, 156, 159, 163]