题目链接
Problem Description
The new season has begun, you have n competitions and m well prepared decks during the new season. Each competition you could use any deck you want, but each of the decks must be used at least once. Now you wonder how many ways are there to plan the season — to decide for each competition which deck you are going to used. The number can be very huge, mod it with 10^9 + 7.
Input
The input file contains several test cases, one line for each case contains two integer numbers n and m (1 ≤ m ≤ n ≤ 100).
Output
One line for each case, output one number — the number of ways.
Sample Input
3 2
100 25
Sample Output
6
354076161
Hint
Source
2014年山东省第五届ACM大学生程序设计竞赛
解题思路:
1.第二类斯特林数,盒子不相同的模型
#include<bits/stdc++.h>
using namespace std;
//s[i][j]表示将i个球放入到j个相同的盒子里的方法数
long long int a,b,ans,s[105][105];
void init(){
s[1][1] = 1;
for(int i = 2;i <= 100;i++)
for(int j = 1;j <= i;j++)
s[i][j] = (s[i - 1][j - 1] + j * s[i - 1][j]) % 1000000007;///竟然没看到有括号......
return;
}
int main(){
init();
while(~scanf("%lld%lld",&a,&b)){
ans = 1;
for(int i = 1;i <= b;i++)
ans = (ans * i) % 1000000007;
ans = (ans * s[a][b]) % 1000000007;
printf("%lld\n",ans);
}
return 0;
}