FZU - 1570 集合划分问题 (Stirling数)
2016-09-24 01:32
387 查看
题目:
Description
n个元素的集合{1,2,...,n}可以划分若干个非空子集。例如,当n=4时,集合{1,2,3,4}可以划分为15个不同的非空子集如下:
给定正整数n(1<=n<=20),计算出n个元素的集合{1,2,...,n} 可以化为多少个不同的非空子集。
Input
多组输入数据,每组数据1行,表示元素个数n.
Output
对于每组数据,输出一行一个数,表示不同的非空子集的个数。
Sample Input
Sample Output
用递归法求出第二类Stirling数,然后求和得到sum即为答案。
代码:
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
2 4
Sample Output
2 15
用递归法求出第二类Stirling数,然后求和得到sum即为答案。
代码:
#include<iostream> using namespace std; const int l = 21; long long Stirling[l][l]; long long sum[l]; void getStirling() { for (int i = 0; i < l; i++) { sum[i] = 0; for (int j = 0; j < l; j++)Stirling[i][j] = 0; } Stirling[0][0] = 1; for (int i = 1; i < l; i++)for (int j = 1; j <= i; j++) { Stirling[i][j] = Stirling[i - 1][j - 1] + Stirling[i - 1][j] * j; sum[i] += Stirling[i][j]; } } int main() { getStirling(); int n; while (cin >> n)cout << sum[n] << endl; return 0; }
相关文章推荐
- fzu 1570 集合划分问题 第二类斯特林数 n个不同小球放到m个相同的盒子的方法个数
- FZU 1570 集合划分问题(bell数)
- [ACM] FZU 1570 集合划分问题( 不同小球放入相同盒子,第二类Stirling数)
- FZU 1570 集合划分问题
- Problem 1202 信与信封问题 from http://acm.fzu.edu.cn/problem.php?pid=1202
- FZU 1040(基因序列相似性问题-CLCS)
- FZU 2030 括号问题
- FZU 1202 信与信封问题
- FZU 1582 众数问题
- fzu 1036 四塔问题
- FZU 1205(小鼠迷宫问题)BFS+DFS的基本综合运用(同一题目中体现两种搜索方法的特点)
- Problem 1582 众数问题 from http://acm.fzu.edu.cn/problem.php?pid=1582
- FZU 2029 买票问题
- FZU 2027 单词问题
- dp:FZU2030括号问题
- FZU---2030 括号问题[爆搜||DP]
- FZU 1055 赋值问题
- http://acm.fzu.edu.cn/problem.php?pid=1564 C(n,k)和素数P的问题
- FZU 1062 洗牌问题
- Fzu_1062 洗牌问题