Maximizar a soma dos números "não sobrepostos" da matriz

Apenas procurando um pouco de direção, percebo que o exemplo dado é possível de ser resolvido usando a iteração de força bruta, mas estou procurando uma solução mais elegante (ou seja, matemática?) Que poderia potencialmente resolver exemplos significativamente maiores (digamos, 20x20 ou 30x30). ). É inteiramente possível que isso não possa ser feito, e eu tive muito pouco sucesso em propor uma abordagem que não dependa da força bruta ...

Eu tenho uma matriz (chame de A) que é nxn. Desejo selecionar um subconjunto (chamá-lo de B) de pontos da matriz A. O subconjunto será composto por n elementos, onde um e apenas um elemento é obtido de cada linha e de cada coluna de A. A saída deve fornecer uma solução ( B) tal que a soma dos elementos que compõem B é o valor máximo possível, dadas essas restrições (por exemplo, 25 no exemplo abaixo). Se forem encontradas várias instâncias de B (isto é, soluções diferentes que fornecem a mesma soma máxima), a solução para B que possui o maior elemento mínimo deve ser selecionada.

B também poderia ser uma matriz de seleção que é nxn, mas onde apenas os n elementos desejados são diferentes de zero.

Por exemplo: se A =

<code>|5 4 3 2 1|
|4 3 2 1 5|
|3 2 1 5 4|
|2 1 5 4 3|
|1 5 4 3 2|
</code>

=> B seria

<code>|5 5 5 5 5|
</code>

No entanto, se A =

<code>|5 4 3|
|4 3 2|
|3 2 1|
</code>

B =

<code>|3 3 3|
</code>

Como o elemento mínimo de B é 3, que é maior que para

<code>|5 3 1|
</code>

ou

<code>|4 4 1|
</code>

que também somam 9

questionAnswers(4)

yourAnswerToTheQuestion