【题目描述】
设S是一个具有n个元素的集合,S=〈a1,a2,……,an〉,现将S划分成k个满足下列条件的子集合S1,S2,……,Sk且满足:
1.Si≠∅
2.Si∩Sj=∅ (1≤i,j≤k,i≠j)
3.S1∪S2∪S3∪…∪Sk=S则称S1,S2,……,Sk是集合S的一个划分。
它相当于把S集合中的n个元素a1,a2,……,an放入k个(0<k≤n<30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S(n,k)。
【输入】
给出n和k。
【输出】
n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S(n,k)。
【输入样例】
10 6
【输出样例】
22827
思路:计算 C(n,k) ,直接递归即可
#include<iostream>
using namespace std;
long long calculate(long long n,long long k)
{
if(n<k||k==0)
return 0;
if(n==k||k==1)
return 1;
return calculate(n-1,k-1)+k*calculate(n-1,k);
}
int main()
{
long long n,k;
cin>>n>>k;
cout<<calculate(n,k)<<endl;
return 0;
}
信息学奥赛一本通T1315:递归算法 集合的划分 归属于 递归算法,更多同类题解源程序见:递归算法 和 集合的划分
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!