【TFLSnoi李志帅】---函数递归

fyx的博客地址,墙裂推荐!博客:https://www.cnblogs.com/qwn34/

 

 

1315:【例4.5】集合的划分             

老狮:这也是一道经典例题,做好这道题,你的递归差不多就没问题了【狗头保命】


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 9463     通过数: 4074

【题目描述】

设S是一个具有n个元素的集合,Sa1a2an现将S划分成k个满足下列条件的子集合S1S2…Sk,且满足:

1.Si

2.SiSj          (1ijki≠j)

3.S1S2S3SkS

则称S1S2Sk是集合S的一个划分。它相当于把S集合中的n个元素a1a2an 放入k个(0kn30)无标号的盒子中,使得没有一个盒子为空。请你确定n个元素a1a2an 放入k个无标号盒子中去的划分数S(n,k)

【输入】

给出nk。

【输出】

n个元素a1a2an 放入k个无标号盒子中去的划分数S(n,k)

【输入样例】

10 6

【输出样例】

22827


————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
这道题有很多乱七八糟的符号,看起来有点怪怪的
翻译过来就是。。。

1.Si0     没有空盘子

2.Si-Sj!0       也就是说每个盘子里元素数量各不相同   (1ijki≠j)

3.S1+S2+S3++SkS     每个元素都要分进盘子

 

 

上代码!

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n,k;
 4 long long jh(int n,int k)
 5 {
 6     if(n<k || k==0)return 0;//递归边界,当盒子数比元素数大时,归零;当没有盒子时,归零;
 7     else if(k==n || k==1)return 1;//递归边界,当盒子数等于元素数时,归一;当只有一个盒子时,归一;
 8     return jh(n-1,k)*k+jh(n-1,k-1);//递归式
 9 }
10 int main()
11 {
12     cin>>n>>k;
13     cout<<jh(n,k);
14     return 0;
15 }

 

最后————

fyx的博客地址,墙裂推荐!博客:https://www.cnblogs.com/qwn34/

 

posted @ 2020-08-20 21:48  九州霜  阅读(129)  评论(0编辑  收藏  举报