05AB1E , 8 7 5 байт
Збережено 2 байти завдяки @Adnan
0š¥þO
Спробуйте в Інтернеті!
Як?
Для цього використовується алгоритм, який вперше знайшов @tsh . Якщо вам подобається ця відповідь, обов’язково підкріпіть їх відповідь !
Щоразу, коли хмарочос буде нижче або вище, ніж попередній, його можна пофарбувати "безкоштовно", просто подовживши мазки.
Наприклад, малювати хмарочоси і на малюнку нижче нічого не коштує.BC
З іншого боку, нам потрібні два нові мазки пензлем для малювання хмарочоса , незалежно від того, чи будуть вони після цього повторно використані чи ні.E
Для першого хмарочоса нам завжди потрібно стільки мазків, скільки в ньому підлоги.
Перетворення цього на математику:
S=h0+∑i=1nmax(hi−hi−1,0)
Якщо ми додамо до списку, це може бути спрощено до:0
S=∑i=1nmax(hi−hi−1,0)
Прокоментував
0š¥þO # expects a list of non-negative integers e.g. [10, 9, 8, 9]
0š # prepend 0 to the list --> [0, 10, 9, 8, 9]
¥ # compute deltas --> [10, -1, -1, 1]
þ # keep only values made of decimal digits
# (i.e. without a minus sign) --> ["10", "1"]
O # sum --> 11