Вы можете вспомнить хоть одного своего знакомого до двадцатилетнего возраста, который в... Вы можете вспомнить хоть одного своего знакомого до двадцатилетнего возраста, который в детстве не играл в компьютерные игры? Если да, то может быть вы и сами не знакомы с этим развлечением? Впрочем, трудностей при решении этой задачи это создать не должно. Во многих старых играх с двумерной графикой можно столкнуться с подобной ситуацией. Какой-нибудь герой прыгает по платформам (или островкам), которые висят в воздухе. Он должен перебраться от одного края экрана до другого. При этом при прыжке с одной платформы на соседнюю, у героя уходит |y2-y1| единиц энергии, где y1 и y2 – высоты, на которых расположены эти платформы. Кроме того, у героя есть суперприем, который позволяет перескочить через платформу, но на это затрачивается 3*|y3-y1| единиц энергии. Конечно же, энергию следует расходовать максимально экономно. Предположим, что вам известны координаты всех платформ в порядке от левого края до правого. Сможете ли вы найти, какое минимальное количество энергии потребуется герою, чтобы добраться с первой платформы до последней? Входные данные В первой строке входного файла INPUT.TXT записано количество платформ n (1 ≤ n ≤ 30000). Вторая строка содержит n натуральных чисел, не превосходящих 30000 – высоты, на которых располагаются платформы. Выходные данные В выходной файл OUTPUT.TXT запишите единственное число – минимальное количество энергии, которую должен потратить игрок на преодоление платформ (конечно же в предположении, что cheat-коды использовать нельзя). INPUT.TXT 3 1 5 10 OUTPUT.TXT 9
# Чтение входных данных with open("INPUT.TXT", "r") as f: n = int(f.readline()) heights = list(map(int, f.readline().split())) # Инициализация массива для хранения минимальной энергии energy = [0] * n energy[0] = 0 # Вычисление минимальной энергии for i in range(1, n): energy[i] = min(energy[i-1] + abs(heights[i] - heights[i-1]), energy[i-2] + 3 * abs(heights[i] - heights[i-2])) # Запись результата в файл with open("OUTPUT.TXT", "w") as f: f.write(str(energy[n-1]))
Этот код считывает высоты платформ, затем вычисляет минимальное количество энергии, которое потребуется игроку для преодоления всех платформ, и записывает результат в файл OUTPUT.TXT.
Вот пример решения на Python:
# Чтение входных данныхwith open("INPUT.TXT", "r") as f:
n = int(f.readline())
heights = list(map(int, f.readline().split()))
# Инициализация массива для хранения минимальной энергии
energy = [0] * n
energy[0] = 0
# Вычисление минимальной энергии
for i in range(1, n):
energy[i] = min(energy[i-1] + abs(heights[i] - heights[i-1]), energy[i-2] + 3 * abs(heights[i] - heights[i-2]))
# Запись результата в файл
with open("OUTPUT.TXT", "w") as f:
f.write(str(energy[n-1]))
Этот код считывает высоты платформ, затем вычисляет минимальное количество энергии, которое потребуется игроку для преодоления всех платформ, и записывает результат в файл OUTPUT.TXT.