集合划分问题
来源:互联网 发布:java游戏源码教程 编辑:程序博客网 时间:2024/06/05 21:16
2630: 集合划分问题
时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte
总提交: 152 测试通过:103
注:
总提交: 152 测试通过:103
描述
n(0<n<=15)个元素的集合{1,2,……,n}可以划分为若干个非空子集。例如,当n=4时,集合{1,2,3,4}可以有15种不同的划分方法:
{{1},{2},{3},{4}}
{{1,2},{3},{4}}
{{1,3},{2},{4}}
{{1,4},{2},{3}}
{{2,3},{1},{4}}
{{2,4},{1},{3}}
{{3,4},{1},{2}}
{{1,2},{3,4}}
{{1,3},{2,4}}
{{1,4},{2,3}}
{{1,2,3},{4}}
{{1,2,4},{3}}
{{1,3,4},{2}}
{{2,3,4},{1}}
{{1,2,3,4}}
输入
每组数据输入包括1行,代表元素个数n。
输出
每组输出不同的非空子集划分数目。
样例输入
4
5
样例输出
15
52
52
思路:
组合数学里的贝尔数(Bell),自行百度即可。
#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>using namespace std;typedef long long int ll;ll Stirling(int n,int m){if ((m > n) ||(m == 0)) return 0; if ((m == 1)||(m == n)) return 1; return Stirling(n-1,m-1)+m*Stirling(n-1,m);}int main(){int N;while(~scanf("%d",&N)){ll ans = 0;for(int i=1; i<=N; i++)ans += Stirling(N,i);printf("%I64d\n",ans);}return 0;}
注:
2-8是本题的一个子问题。
分享一个链接学习一下
http://blog.csdn.net/acdreamers/article/details/12309269
0 0
- 集合划分问题
- 集合划分问题I
- 集合划分问题
- 集合划分问题 分治
- 集合划分问题
- 集合划分问题
- 集合划分问题
- 集合划分问题
- 集合划分问题
- 集合划分问题
- 集合划分问题求解
- 集合划分问题
- 集合划分问题
- 集合划分问题
- 集合划分问题
- 集合划分问题 2
- 集合划分问题
- 集合划分问题
- 如何让 Spring Boot 项目发布到 Tomcat 服务器
- 使用JS调用迅雷下载网站本地视频,生成迅雷下载链接
- [整理]-iOS- 原生二维码的制作步骤
- List源码详解
- PHP自学日记9.21
- 集合划分问题
- python中的模块
- 非常好用的两个PHP函数 serialize()和unserialize()
- sqlserver的表触发器和定时器
- 发布一个c++写的简易datetime库
- Android自定义View中MeasureSpec的使用
- 微机原理-第一章
- O盟通知消息列表的设置教程
- 阿里云OSS 上传文件 删除文件自封装 —python