思路
设 表示前 个数分到 组的情况数。
两种转移:
-
新开一组。。
-
加入之前的组。在 之前与 模 余数相同的有 个,剩下 组可以加入。。
最后答案为 。
code
int n,m;
int f[maxn][maxn];
int T;
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read();m=read();
f[0][0]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
f[i][j]=f[i-1][j-1];
if(j>=(i+1)/m)f[i][j]+=f[i-1][j]*(j-(i-1)/m);
f[i][j]%=mod;
// cout<<f[i][j]<<" ";
}
// cout<<"\n";
}
for(int i=1;i<=n;i++)printf("%lld\n",f[n][i]);
}