Official
C - 部活動の選択 / Choosing a Club Activity Editorial
by
C - 部活動の選択 / Choosing a Club Activity Editorial
by
sounansya
動的計画法を考えます。
\(d[i][v]\) を「\(i\) 番目の部活動まで考えた時に、活動ポイントを \(K\) で割ったあまりが \(v\) であるような選び方を \(10^9+7\) で割ったあまり」とします。
遷移は \(d[i][v]=d[i-1][v] + d[i-1][(v-A_i)\bmod K]\) となります。
\(1\) つも部活動を選ばない操作は許されないので、答えは \(d[N][0]-1\) を \(10^9+7\) で割ったあまりとなります。
n, k = map(int, input().split())
MOD = 10**9 + 7
d = [0] * k
d[0] = 1
for v in list(map(int, input().split())):
v %= k
dd = d.copy()
for i in range(k):
d[(i + v) % k] += dd[i]
d[(i + v) % k] %= MOD
print((d[0] - 1) % MOD)
posted:
last update:
