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: