Ho fatto questa domanda su StackOverflow , ma penso che qui sia un posto più appropriato.
Questo è un problema dall'introduzione al corso sugli algoritmi :
Hai una matrice con numeri interi positivi (la matrice non deve essere ordinata o gli elementi univoci). Suggerisci un algoritmo per trovare la somma più grande di elementi che è divisibile per .
Esempio: . La risposta è (con elementi )
E 'relativamente facile trovare in utilizzando la programmazione dinamica e memorizzare più grande somma con resto 0 , 1 , 2 , . . . , n - 1 .
Inoltre, se limitiamo l'attenzione a una sequenza contigua di elementi, è facile trovare tale sequenza ottimale in tempo, memorizzando somme parziali modulo n : let S [ i ] = a [ 0 ] + a [ 1 ] + ⋯ + a [ i ] , per ogni resto r ricordare l'indice più grande j tale che S [ j ] ≡ r , quindi per ogni i consideri S [ j ] - S [ i ] dove j è l'indice corrispondente a r = S [ i ] mod n .
Ma esiste una soluzione -time per il caso generale? Ogni suggerimento sarà apprezzato! Ritengo che questo abbia qualcosa a che fare con l'algebra lineare, ma non sono sicuro di cosa esattamente.
In alternativa, questo può essere fatto in tempo?