A26535. 集合的划分
填空题
中等
知识点
题目描述
集合的划分
题目描述
设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参考答案
#include<bits/stdc++.h>
using namespace std;
long long s[40][40];//s[i][j]:将i个球装j个盒子的情况数。
int main()
{
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; ++i)//球数
for(int j = 1; j <= i && j <= k; ++j)//盒子数,不会比球数多
{
if(j == 1)
s[i][j] = 1;
else
s[i][j] = s[i-1][j-1] + j*s[i-1][j];
}
cout << s[n][k];
return 0;
}
上一题
下一题