Уже всё перепробовал и передумал, никак не могу пройти тестировщика. Когда вводится 3-5 чисел то работает нормально, но как только список платформ увеличивается до 100+, то не получается высчитать количество минимальной энергии, ответ получается неверный.
Вот задача
Герою компьютерной игры нужно перебраться от одного края экрана к другому, перепрыгивая по платформам. При этом при прыжке с одной платформы на соседнюю, у героя уходит |y2-y1| единиц энергии, где y1 и y2 – высоты, на которых расположены эти платформы. Кроме того, у героя есть суперприем, который позволяет перескочить через платформу, но на это затрачивается 3*|y3-y1| единиц энергии. Конечно же, энергию следует расходовать максимально экономно.
Вам известны высоты всех платформ в порядке от левого края до правого. Необходимо найти, какое минимальное количество энергии потребуется герою, чтобы добраться с первой платформы до последней.
Формат входных данных
В первой строке - количество платформ (0 < n <= 30000). Далее на каждой из n строк записана высота , на которой расположена очередная платформа.
Формат выходных данных
Одно число — минимальное количество энергии, которую должен потратить герой на преодоление платформ.
Примеры
Ввод
3
1
5
10
Вывод
9
Ввод
1
1
Вывод
0
Ввод
2
20
14
Вывод
6
# Создаем список платформ N = int(input()) i = 0 A = [] while i<N: A.append(int(input())) i += 1 if N>2: energy = [0, abs(A[1] - A[0])]+[0]*(N-2) Prev = [0]*(N) for i in range(2,N): if energy[i-1] + abs(A[i] - A[i-1]) < 3*abs(A[i] - A[i-2]): energy[i] = (abs(A[i] - A[i-1])) Prev[i] = i-1 else: energy[i] = (3*abs(A[i] - A[i-2])) Prev[i] = i-2 # Идем по списпку предков и суммирум затраченную энергию tot_energy = 0 k = len(A)-1 while k > 0: tot_energy += energy[k] k = Prev[k] print(tot_energy) elif N == 2: print(abs(A[1] - A[0])) else: print(0)
