Вы можете вспомнить хоть одного своего знакомого до двадцатилетнего возраста, который в детстве не играл в компьютерные игры? если да, то может быть вы и сами не знакомы с этим развлечением? впрочем, трудностей при решении этой это создать не должно. во многих старых играх с двумерной графикой можно столкнуться с подобной ситуацией. какой-нибудь герой прыгает по платформам (или островкам), которые висят в воздухе. он должен перебраться от одного края экрана до другого. при этом при прыжке с одной платформы на соседнюю, у героя уходит |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
Ответы на вопрос:
//у меня прошел все тесты
#include < iostream>
#include < vector>
#include < algorithm>
using namespace std;
int abc(int a)
{
if(a > 0)
return a;
return a *= -1;
}
int main()
{
int n;
cin> > n;
vector< int> d(n+1);
//ввод
for(int i = 1; i< =n; i++)
{
cin> > d[i];
}
vector< int> b(n+1);
b[1] = d[1];
b[2] = abc(d[2] - d[1]);
//дп
for(int i = 3; i< =n; i++)
{
long a = abc( d[i] - d[i-1] );
long z = abc( 3 * ( d[i] - d[i-2] ) );
a = a + b[i-1];
z = z + b[i-2];
b[i] = min(a,z);
// cout< < b[i]< < " "< < i< < endl;
if(i == 3 & & b[i] == z)
{
b[i] -= d[i-2];
}
}
cout< < b[n]< < endl
}
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
glinkirk02.06.2022 13:08
-
f2a5p404.03.2020 00:46
-
Karina12133427.02.2023 09:02
-
Mary170829.10.2022 07:13
-
aleksminaev01.07.2022 00:19
-
m1830311.06.2023 14:52
-
sens198030.01.2022 03:16
-
мир27613.05.2020 17:40
-
VoltGame28.04.2020 20:24
-
AlexFireStreamGun24.03.2020 18:40
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.