Escrito por Leonardo Paes.
Conhecimento prévio necessário:
Existem diversas soluções para esse problema. Uma solução que gosto muito utiliza apenas estruturas da STL, no caso o Set. A ideia principal do problema é: a solução que maximiza o dano causado no monstro seria do tipo: dano de todas os feitiços usados *dano dos maiores feitiços, onde é a quantidade de feitiços de raio que Flúcio tem. Porque? Note que cada feitiço de raio duplica o próximo feitiço lançado, então por isso esse é o dano máximo. Porém, nem sempre é possível chegar nesse dano. No caso de termos os maiores feitiços sendo do tipo raio, pois algum deles não duplicará o dano do outro, tendo que duplicar o dano de algum do tipo fogo.
Para codarmos isso de modo simples, utilizaremos 4 sets: Um mantendo os k maiores feitiços, um mantendo o resto dos feitiços, um mantendo todos os feitiços existentes do tipo fogo e outro mantendo todos os feitiços existentes do tipo raio. A melhor maneira de entender o código é dando uma olhada nele.
Código de exemplo: