题目描述
集合的划分,是指将 S 集合中的 n 个元素 a1,a2,……,an 放入 k 个无标号的盒子中,使得没有一个盒子为空。
例如,集合 S = {1,2,3,4},k = 2 的其中一种划分方案为 {1,3}, {2,4}。注意,这和 {2,4}, {1,3} 是同一种划分方案,因为盒子没有标号。
给出 n 和 k,请你算出集合划分的方案总数 S(n, k)。
输入
一行两个整数 n, k(0<k<=n<=30)。
输出
一行一个整数,表示总方案数。
样例输入 复制
4 2
样例输出 复制
7
代码,上!!!!!!!!:
#include<bits/stdc++.h>
using namespace std;
long long s(int n,int k)
{
if((n<k)||(k==0))
return 0;
if((k==1)||(k==n))
return 1;
return s(n-1,k-1)+k*s(n-1,k);
}
int main()
{
long long n,k;
cin>>n>>k;
cout<<s(n,k);
}