Я задав це питання на StackOverflow , але думаю, що тут є більш підходяще місце.
Це проблема від Введення в курс алгоритмів :
У вас є масив з позитивними цілими числами (масив не потрібно сортувати або елементи унікальні). Запропонуйте алгоритм , щоб знайти найбільшу суму елементів, що ділиться на .
Приклад: . Відповідь (з елементами )
Порівняно легко знайти його в використовуючи динамічне програмування та зберігаючи найбільшу суму з залишками .
Крім того, якщо ми обмежимо увагу на суміжній послідовності елементів, легко знайти оптимальну таку послідовність за час, зберігаючи часткові суми за модулем : нехай , для кожного залишку запам'ятайте найбільший індекс такий, що , а потім для кожного ви вважаєте де - індекс, що відповідає .n S [ i ] = a [ 0 ] + a [ 1 ] + ⋯ + a [ i ] r j S [ j ] ≡ ri S [ j ] - S [ i ] j r = S [ i ] mod n
Але чи існує рішення -сигналу для загального випадку? Будь-які пропозиції будуть вдячні! Я вважаю, що це має відношення до лінійної алгебри, але я не впевнений, що саме.
Або можна це зробити за час?