Solução Informática – Nível Avançado – Semana 33

por

Solução escrita por Enzo Dantas

Conhecimento prévio recomendado:

A observação essencial é que $$N, K \le 8$$. 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 $$N$$ é a quantidade de pacotes e $$K$$ é a quantidade de crianças, imagine um array $$arr$$ de tamanho $$N$$ tal que cada posição tem um valor de 1 a $$K$$, indicando que o pacote da posição $$i$$ foi pego pela criança $$arr_i$$. {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 $$K$$ na posição atual usando recursão.

Como cada posição pode ter um valor entre 1 e $$K$$ e temos $$N$$ posições, a complexidade final é $$O(K \cdot K \cdot … \cdot K) = O(K^N)$$.

Recomendamos que você tente implementar o problema antes de ver o código. Veja a implementação nesse link.