题目描述
n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案用S(m,n)表示,称为第二类Stirling数。
输入输出格式
输入格式
一行,两个整数为n,m。(1≤n≤10,1≤m≤10)
输出格式
一行,表示其对应的方案数。
输入输出样例
输入样例
3 2
输出样例
3
题解
假设已经放了$(i-1)$个球,总共有$j$个盒子。
如果这些球放满了$(j-1)$个盒子,显然第$i$个球只能放在第$j$个盒子里。
但如果这些球放满了$j$个盒子,那第$i$个球的放置就有$j$种选择。
得出递推式为:$a[i][j]=a[i-1][j]\times j+a[i-1][j-1]$
#include <iostream> #include <cmath> using namespace std; int n, m; int a[11][11]; int main() { cin >> n >> m; a[1][1] = 1; for(int i = 2; i <= n; i++) { for(int j = 1; j <= min(i, m); j++) { a[i][j] = a[i - 1][j] * j + a[i - 1][j - 1]; } } cout << a[n][m]; return 0; }