本文共 1094 字,大约阅读时间需要 3 分钟。
/*=======================================================================3253:集合的划分总时间限制: 1000ms 内存限制: 65536kB描述把一个集A(本题中的集合均不含重复元素)分成若干个非空子集,使得A中每个元素属于且仅属于一个子集,那么这些子集构成的集合称为A的一个划分。比如A={1,2,3},那么{ {1},{2 ,3} }以及{ {1},{2},{3} } 都是A的划分。现在给定一个整数n,我们希望知道包含n个元素的集合有多少不同的划分。当n=3的时候,仍然考虑集合{1,2,3},它的所有划分如下{ {1} , {2} , {3} }{ {1 , 2} , {3} }{ {1 , 3} , {2} }{ {1} , {2 , 3} } { {1 , 2 , 3} }只有5种,但随n的增加,划分方法的个数会以指数速度增加。比如n=4的时候,就有15种方法,考虑集合{1,2,3,4},划分方式如下{ {1},{2},{3},{4}}{ {1},{2},{3,4}}{ {1,2},{3},{4}}{ {1,3},{2},{4}}{ {1,4},{2},{3}}{ {1},{2,3},{4}}{ {1},{3},{2,4}}{ {1,2},{3,4}}{ {1,3},{2,4}}{ {1,4},{2,3}}{ {1},{2,3,4}}{ {2},{1,3,4}}{ {3},{1,2,4}}{ {4},{1,2,3}}{ {1,2,3,4}}当n>15的时候,划分方法数将超过32位整数所能表示的范围,我们希望你的程序能计算出n<=15的时候,包含n个元素的集合的划分方法的个数输入一个整数n(0<=n<=15,n=0的时候认为有一种划分方法)输出包含n个不同元素的集合的划分方法的个数样例输入315样例输出51382958545提示递归公式,设n个元素的集合可以划分为F(n,m)个不同的由m个非空子集组成的集合。F(n,m) = 1, where n=0, n=m, n=1, or m=1F(n,m) = 0, where n
1 #include2 long long fun(int n,int m) 3 { 4 if(n
题目链接:http://bailian.openjudge.cn/practice/3253/
转载地址:http://ekqka.baihongyu.com/