测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题