Remover itens do conjunto desigualmente distribuído

Tenho um site em que os usuários enviam perguntas (zero, uma ou várias por dia), votam nelas e respondem a uma pergunta por dia (mais detalhesaqu). Um usuário pode ver a pergunta apenas uma vez enviando, votando ou respondend

Tenho um conjunto de perguntas que os jogadores já viram. Preciso remover 30 perguntas da piscina todos os meses. Preciso escolher perguntas a serem removidas para maximizar o número de perguntas disponíveis restantes no pool para jogadores com menos perguntas disponívei

Exemplo com um conjunto de 5 perguntas (e é necessário remover 3):

jogador A viu as perguntas 1, 3 e 5player B viu as perguntas 1 e 4player C viu as perguntas 2 e 4

Pensei em remover as perguntas que o melhor jogador já viu, mas a posição mudaria. Seguindo o exemplo acima, o jogador A tem apenas duas perguntas para jogar (2 e 4). No entanto, se eu remover 1, 3 e 5, a situação seria:

player A pode reproduzir as perguntas 2 e 4 jogador B pode reproduzir a pergunta 2player C não pode jogar nada porque 1,3,5 foram removidos e ele já viu 2 e 4.

A pontuação desta solução é zero, ou seja, o jogador com menor quantidade de perguntas disponíveis tem zero de perguntas disponíveis para jogar.

Nesse caso, seria melhor remover 1, 3 e 4, fornecendo:

jogador A pode reproduzir a pergunta 2 @player B pode reproduzir as perguntas 2 e 5player C pode reproduzir a pergunta 5

A pontuação desta solução é uma, porque os dois jogadores com menos quantidade de perguntas disponíveis para jogar têm uma pergunta disponíve

Se o tamanho dos dados for pequeno, eu seria capaz de forçar a solução com força bruta. No entanto, tenho centenas de jogadores e perguntas, então estou procurando algum algoritmo para resolver iss

questionAnswers(10)

yourAnswerToTheQuestion