Solução escrita por João Pedro Castro
Conhecimento prévio necessário:
Podemos perceber que só precisamos considerar a compra de um pacote se não existe nenhum outro pacote
tal que
e
, já que sempre será mais vantajoso comprar o pacote
, que tem mais doces e é mais barato (ou tem o mesmo preço); vamos guardar os pacotes que são considerados do menor para o maior em um array
. Agora, podemos usar a ideia gulosa de comprar a quantidade máxima possível de um pacote
para
, e depois usando o resto de
pela quantidade restante de moedas
para comprar o próximo pacote
; e como comprar o próximo pacote
vezes é melhor do que comprar o pacote atual
vezes, podemos simplesmente usar a expressão a seguir para descobrir quanto iremos comprar do pacote
:
E então usar soma de prefixo para escrever o maior array lexicograficamente possível.