信息学奥赛一本通T1315:递归算法 集合的划分

【题目描述】设S是一个具有n个元素的集合,S=⟨a1,a2,……,an⟩,现将S划分成k个满足下列条件的子集合S1,S2,……,Sk且满足:则称S1,S2,……,Sk是集合S的一个划分。它相当于把S集合中的n个元素a1,a2,……,an放入k个(0<k≤n<30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1,a2,……,an放入k个无标号盒子中去的划分数S(n,k)。【输入】给出n和

信息学奥赛一本通T1315:集合的划分

【题目描述】

设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 条评论

请先 登录 后评论
不写代码的码农
轩爸

0 篇文章

作家榜 »

  1. admin 2 文章
  2. 张芳 0 文章
  3. hanna 0 文章
  4. Jason 0 文章
  5. lixiaioqian 0 文章
  6. GeraldWrora 0 文章
  7. 董伟 0 文章
  8. 信奥达人 0 文章