Solução escrita por Arthur Lobo
Conhecimento prévio necessário:
Primeiro vamos reduzir o problema para um grafo: cada bola será representada por um vértice, e vamos criar uma aresta entre todo par de vértices com peso sendo a pontuação recebida quando as duas bolas são escolhidas para uma operação, ou seja, .
Agora vamos imaginar um conjunto válido de pares de bolas escolhidas e destacar as arestas correspondentes a essas escolhas no nosso grafo. Quando um conjunto de escolhas é válido, ou seja, quando é possível que realizar uma sequência válida de escolhas que resulte nesse conjunto?
As arestas escolhidas não podem formar nenhum ciclo! Essa é a única restrição que o conjunto precisa ter. Observe que, caso tenha algum ciclo, alguma bola terá que ser removida duas vezes. E sempre que não existe um ciclo, podemos fazer uma espécie de ordenação topológica para montar a sequência válida de remoções.
Agora nosso problema é: Dado um grafo completo, escolha um conjunto de arestas de modo que a soma dos pesos delas seja máximo e não exista nenhum ciclo.
arestas e nenhum ciclo, isso te lembra alguma coisa? É uma árvore! Queremos encontrar a maior árvore contida nesse grafo completo, ou seja, a Árvore Geradora Máxima (Maximum Spanning Tree). Podemos encontrar a MaximumST da mesma forma que fazemos com a MinimumST, mas ordenando da maior aresta para a menor.
A complexidade fica , porque temos arestas e ordenamos elas em .
Recomendamos que você tente implementar o problema antes de ver o código. Veja a implementação nesse link.