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.