Eu fiz essa pergunta no StackOverflow , mas acho que aqui é um lugar mais apropriado.
Este é um problema do curso Introdução aos algoritmos :
Você tem uma matriz com números inteiros positivos (a matriz não precisa ser classificada ou os elementos exclusivos). Sugira um algoritmo para encontrar a maior soma de elementos divisível por .n
Exemplo: . A resposta é (com elementos )56
É relativamente fácil encontrá-lo em usando programação dinâmica e armazenando a maior soma com o restante .0 , 1
Além disso, se restringirmos a atenção a uma sequência contígua de elementos, é fácil encontrar a sequência ideal em tempo, armazenando somas parciais no módulo : deixe , para cada restante lembre-se do maior índice modo que S [j] \ equiv r \ pmod {n} e, em seguida, para cada i considere S [j] -S [i] onde j é o índice correspondente a r = S [i] \ bmod n .n S [ i ] = a [ 0 ] + a [ 1 ] + ⋯ + a [ i ]j S [ j ] ≡ ri S [ j ] - S [ i ] j r = S [ i ] mod n
Mas existe uma solução de tempo para o caso geral? Todas as sugestões serão apreciadas! Considero que isso tem algo a ver com álgebra linear, mas não sei exatamente o que.
Como alternativa, isso pode ser feito no tempo ?