现有r个互不相同的盒子和n个互不相同的球,要将这n个球放入r个盒子中,且不允许有空盒子。则有多少种放法?
Output |
有多少种放法。
|
Sample Input |
3 2 |
Sample Output |
6 |
分析:
在这之后,我们可不能忘了一点,第二类stirling数是将n个有区别的球的球放入r个无标号的盒子中( n>=k>=1,且盒子不允许为空)的方案数,而此题的盒子有编号,所以我们必须将递推得出的结果s[n][r]再乘上r!,这才是最终的结果。
#include<iostream>
using namespace std;
long long s[20][20] = {1},jc[11]={0,1,2,6,24,120,720,5040,40320,36288,3628800};
int main()
{
int n,r;
cin>>n>>r;
long long an = 1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= r; j++)
{
s[i][j] = j * s[i - 1][j] + s[i - 1][j - 1];
}
cout<<s[n][r] * jc[r]<<endl;
return 0;
}