题目描述
计算一下如果把n个互不相同的同学分成k组的话能有多少种可能。
分组的要求:
1.小组不能为空
2.每个同学都会且仅会属于一个小组
3.不同小组的人数不一定相同
输入
整数n,k,表示把n个同学分成k个小组。
1≤n≤3000,1≤k≤n
输出
整数m,表示可行的分组方案数
数字有点大,请输出模1e9+9之后的结果。
样例输入
6 3
样例输出
90
#include <stdio.h>
#include <stdlib.h>
long long mod = 1e9+9;
long long arr[3005][3005];
int main() {
long long people, group;
scanf("%lld %lld",&people,&group);
arr[1][1] = 1;
for(int i = 2 ; i <= people; i ++) {
for(int j = 1; j <= i; j++) {
arr[i][j] = arr[i-1][j-1]+j*arr[i-1][j];//单独放最后一个+最后一任选
if(arr[i][j]>mod)arr[i][j] %= mod;
}
}
printf("%lld",arr[people][group]);
}