Attraversare a
e contare a[i] mod k
; ci dovrebbero essere k
tali conteggi.
Recurse e memoize sulle partizioni distinte di k, 2*k, 3*k...etc.
con parti inferiori o uguali a k
, aggiungendo i prodotti dei conteggi appropriati.
Ad esempio, se k
erano 10
, alcune delle partizioni sarebbero 1+2+7
e 1+2+3+4
; ma durante la memoizzazione, dovremmo calcolare solo una volta quante coppie mod k
nella matrice producono (1 + 2)
.
Ad esempio, k = 5, a = {1,4,2,3,5,6}
:
counts of a[i] mod k: {1,2,1,1,1}
products of distinct partitions of k:
5 => 1
4,1 => 2
3,2 => 1
products of distinct partitions of 2 * k with parts <= k:
5,4,1 => 2
5,3,2 => 1
4,1,3,2 => 2
products of distinct partitions of 3 * k with parts <= k:
5,4,1,3,2 => 2
answer = 11
{1,4} {4,6} {2,3} {5}
{1,4,2,3} {1,4,5} {4,6,2,3} {4,6,5} {2,3,5}
{1,4,2,3,5} {4,6,2,3,5}
non consecutivi? sottosequenze? – vish4071
Poiché hai specificato limiti massimi costanti qualsiasi soluzione al tuo problema è banalmente O (1). –
haha :) questo è buono !! @JohnColeman – vish4071