Zadałem to pytanie na StackOverflow , ale myślę, że tutaj jest bardziej odpowiednie miejsce.
Jest to problem od kursu Wprowadzenie do algorytmów :
Musisz tablicę z liczb całkowitych dodatnich (tablica nie muszą być sortowane lub elementów unikalnych). Zaproponuj algorytm , aby znaleźć największą sumę elementów, która jest podzielna przez .
Przykład: . Odpowiedź to (z elementami )
Stosunkowo dynamicznie jest go znaleźć w przy użyciu programowania dynamicznego i przechowując największą sumę z resztą .
Ponadto, jeśli ograniczenia uwagę na ciągłej sekwencji elementów, łatwo znaleźć optymalną takiej sekwencji w czasie przechowywania cząstkowych sumy modulo niech , dla każdej reszty pamiętaj największy indeks taki, że , a następnie dla każdego rozważasz S [j] -S [i] gdzie j jest indeksem odpowiadającym r = S [i] \ bmod n .
Ale czy istnieje rozwiązanie czasu w przypadku ogólnym? Wszelkie sugestie będą mile widziane! Myślę, że ma to coś wspólnego z algebrą liniową, ale nie jestem pewien, co dokładnie.
Alternatywnie, czy można to zrobić w czasie ?