05AB1E , 8 7 5 bytes
Guardado 2 bytes gracias a @Adnan
0š¥þO
Pruébalo en línea!
¿Cómo?
Esto está utilizando el algoritmo que fue encontrado por primera vez por @tsh . Si te gusta esta respuesta, ¡asegúrate de votarla también!
Cada vez que un rascacielos es más bajo o más alto que el anterior, se puede pintar 'gratis' simplemente extendiendo las pinceladas.
Por ejemplo, pintar los rascacielos B y C en la figura a continuación no cuesta nada.
Por otro lado, necesitamos 2 nuevas pinceladas para pintar el rascacielos E , sin importar si serán reutilizadas después de eso o no.
Para el primer rascacielos, siempre necesitamos tantas pinceladas como pisos.
Convirtiendo esto en matemáticas:
S=h0+∑i=1nmax(hi−hi−1,0)
Si anteponemos a la lista, esto se puede simplificar a:0
S=∑i=1nmax(hi−hi−1,0)
Comentado
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