最初にSSSから0+K+...+(N−1)K=N(N−1)K/20+K+...+(N-1)K = N(N-1)K/20+K+...+(N−1)K=N(N−1)K/2を引いておくと、1つ前の生徒の金額以上に寄付をするという問題に変わる。定式化すると、総和がS−N(N−1)K/2S-N(N-1)K/2S−N(N−1)K/2になるような長さNNNの数列で、単調非減少であるものを数え上げればよいことになる。これは分割数、つまり非負整数S−N(N−1)K/2S-N(N-1)K/2S−N(N−1)K/2をNNN個の非負整数に分割する方法を数え上げることに等しい。1 O(SN){\mathcal O}(SN)O(SN)。
S<N(N−1)K/2S < N(N-1)K/2S<N(N−1)K/2の場合の答えは000である。 ↩︎