ARC 067 E - Grouping
x人をA人以上かつy人以下からなるグループにわける場合の数をf(x,y)とすると、求める数はf(N,B)である。
漸化式を考える。y人のグループを1つも作らない分け方はf(x,y−1)に等しい。また、y人のグループをちょうどk個作る分け方は
f(x−ky,y−1)(yx)(yx−y)...(yx−(k−1)y)k!1=f(x−ky,y−1)(x−ky)!(y!)kx!k!1
である。(同人数のグループの区別はないので、k個のグループを作ったあとk!で割っている。)したがって、漸化式は
f(x,y)=f(x,y−1)+k∈{C,C+1,...,D}∑f(x−ky,y−1)(x−ky)!(y!)kx!k!1
と書ける。ただしf(0,y)=1であり、また、y<Aならf(x,y)=0である。
計算量について。ky≤x≤Nという条件により、与えられたy∈{1,2,...,B}に対して有効なkは高々N/y種類しかないから、遷移の総数は∑yN/y=O(NlogN)。したがって、全体の計算量はO(N2logN)。