集合划分问题(贝尔数)
来源:互联网 发布:3dsmax 安装mac 编辑:程序博客网 时间:2024/04/25 13:51
集合划分问题
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
n个元素的集合{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}}
给定正整数n(1<=n<=20),计算出n个元素的集合{1,2,...,n} 可以化为多少个不同的非空子集。
Input
多组输入数据,每组数据1行,表示元素个数n.
Output
对于每组数据,输出一行一个数,表示不同的非空子集的个数。
Sample Input
24
Sample Output
215
解题思路(From Internet):
设n个元素的集合可以划分为F(n,m)个不同的由m个非空子集组成的集合。考虑3个元素的集合,可划分为① 1个子集的集合:{{1,2,3}}② 2个子集的集合:{{1,2},{3}},{{1,3},{2}},{{2,3},{1}}③ 3个子集的集合:{{1},{2},{3}}∴F(3,1)=1;F(3,2)=3;F(3,3)=1;如果要求F(4,2)该怎么办呢?A.往①里添一个元素{4},得到{{1,2,3},{4}}B.往②里的任意一个子集添一个4,得到{{1,2,4},{3}},{{1,2},{3,4}},{{1,3,4},{2}},{{1,3},{2,4}},{{2,3,4},{1}},{{2,3},{1,4}}∴F(4,2)=F(3,1)+2*F(3,2)=1+2*3=7推广,得F(n,m)=F(n-1,m-1)+m*F(n-1,m)
后来发现这就是组合数学里面的贝尔数。
Bell数的定义:第n个Bell数表示集合{1,2,3,...,n}的划分方案数,即:B[0] = 1;
每一个Bell数都是第二类Stirling数的和,即:
第二类Stirling数的意义是:S(n,k)表示将n个物体划分成k个非空的不可辨别的(可以理解为盒子没有编号)集合的方法
数。很明显,每一个Bell是对应的第二类Stirling数之和。
Bell数的指数生成函数是:
注意本题要用long long型。
/** Copyright (c) 2016, 烟台大学计算机与控制工程学院* All rights reserved.* 文件名称:number.cpp* 作 者:单昕昕* 完成日期:2016年4月29日* 版 本 号:v1.0*/#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;long long S(long long m,long long n){ if(m==1) return 1; if(m==n) return 1; else return S(m-1,n-1)+S(m,n-1)*m;}int main(){ long long n,i; while(cin>>n) { long long sum=0; for(i=1; i<=n; i++) sum+=S(i,n); cout<<sum<<endl; } return 0;}
0 0
- 集合划分问题(贝尔数)
- 集合划分问题--贝尔数
- 贝尔数列_集合的划分
- FZU - 1570 集合划分问题 (Stirling数)
- 贝尔(Bell)数
- FZU 1570 集合划分问题(bell数)
- 挑战程序设计竞赛 划分数,贝尔数,斯特灵数
- 集合划分问题(转)
- 集合划分问题(一)
- 贝尔数
- [ACM] FZU 1570 集合划分问题( 不同小球放入相同盒子,第二类Stirling数)
- 集合的划分问题(二)
- 集合划分问题(斯特林数模板)
- 集合划分问题
- 集合划分问题I
- 集合划分问题
- 集合划分问题 分治
- 集合划分问题
- 荷兰国旗问题,三色排序
- 排序算法
- 《Hibernate学习笔记五》Session 的update方法详解
- leetcode 047 Permutations II
- iOS 开发常用快捷键
- 集合划分问题(贝尔数)
- 编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相
- UVA 10474 Where is the Marble?(简单排序查找)(附lower_bound改写)
- hrbust 1756/哈理工oj Merge Intervals【水题】
- C#小伎俩获取本地或远程磁盘使用信息
- HDU1164 Eddy's research I(解法二)
- 打劫房屋 II
- 第九周周赛——周赛兼组队赛第一场题解(出自HDU5443,本oj,HDU 5667,poj1742,codeforces 664A,BUNOJ 28199)
- LightOJ - 1425 The Monkey and the Oiled Bamboo (水)