05AB1E , 8 7 5 bytes
Guardado 2 bytes graças a @Adnan
0š¥þO
Experimente online!
Quão?
Isso está usando o algoritmo encontrado pela primeira vez por @tsh . Se você gosta desta resposta, não deixe de votar também na resposta !
Cada vez que um arranha-céu é menor ou igual ao anterior, ele pode ser pintado 'de graça', simplesmente estendendo as pinceladas.
Por exemplo, pintar arranha-céus B e C na figura abaixo não custa nada.
Por outro lado, precisamos de duas pinceladas novas para pintar o arranha-céu E , independentemente de serem reutilizadas depois ou não.
Para o primeiro arranha-céu, sempre precisamos de tantas pinceladas quanto de pisos.
Transformando isso em matemática:
S= h0 0+ ∑i = 1nmax ( hEu- hi - 1, 0 )
Se anexarmos à lista, isso poderá ser simplificado para:0 0
S= ∑i = 1nmax ( hEu- 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