Solução escrita por Enzo Dantas
Conhecimento prévio recomendado:
A observação essencial é que . Isso implica que é possível brutar todas as possíveis distribuições, e faremos isso usando o seguinte método: cada pacote de cookie será assinalado a uma pessoa. Lembrando que
é a quantidade de pacotes e
é a quantidade de crianças, imagine um array
de tamanho
tal que cada posição tem um valor de 1 a
, indicando que o pacote da posição
foi pego pela criança
. {2, 1, 2, 4, 3}, por exemplo, indica que os pacotes 1 e 3 estão com a criança 2, o pacote 5 está com a criança 3, e assim por diante. Para testar todas as possíveis distribuições, olhamos de posição em posição e testamos colocar cada valor entre 1 e
na posição atual usando recursão.
Como cada posição pode ter um valor entre 1 e e temos
posições, a complexidade final é
.
Recomendamos que você tente implementar o problema antes de ver o código. Veja a implementação nesse link.