Solução por Lúcio Figueiredo
Conhecimento prévio necessário:
Vamos utilizar programação dinâmica para resolver o problema. Seja o menor custo possível para juntar todos os bolinhos de índices entre
e
.
Vamos analisar a última operação realizada no intervalo , ou seja, a operação que transformou este intervalo em um bolinho só. É possível observar que esta última operação juntou dois sub-intervalos de
em um intervalo só, isto é, a última operação no intervalo juntou os sub-intervalos
e
em um só, para algum
no intervalo
.
Ainda precisamos descobrir como calcular o custo da operação de juntar o intervalo com o intervalo
. Para fazer isso, note que o valor de um intervalo
qualquer, ou seja, o valor de um bolinho de queijo resultante ao juntar todos os bolinhos em
, é exatamente
.
Logo, o custo total de juntar os intervalos e
de modo a formarem um único bolinho
é
, ou seja, a soma dos custos de transformar
e
em um bolinho único e, por fim, o custo de juntar tais dois bolinhos.
Assim, quando calcularmos , podemos iterar por cada
de
a
, calculando assim o menor custo possível para juntar os bolinhos em
. Como podemos calcular a soma de um intervalo qualquer em
(utilizando Soma de Prefixos), a complexidade final da solução é
, pois rodamos um loop em
para cada um dos
estados da programação dinâmica. Por fim, a resposta do problema é
.
Confira o código abaixo para melhor entendimento: