05AB1E , 8 7 5 байт
Сохранено 2 байта благодаря @Adnan
0š¥þO
Попробуйте онлайн!
Как?
Это использует алгоритм, который был впервые найден @tsh . Если вам понравился этот ответ, не забудьте также подтвердить его ответ !
Каждый раз, когда небоскреб ниже или выше предыдущего, его можно покрасить «бесплатно», просто растягивая мазки.
Например, рисование небоскребов и на рисунке ниже ничего не стоит.BC
С другой стороны, нам нужно 2 новых мазка, чтобы нарисовать небоскреб , независимо от того, будут ли они использоваться повторно после этого или нет.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