集合划分问题 2
Time Limit: 1000 MS Memory Limit: 65536 Kb |
Total Submission: 1390 Accepted: 606 |
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}}
其中,集合{{1,2,3,4}} 由一个子集组成;集合{{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,3},{2},{4}}, {{1,4},{2},{3}}, {{2,3},{1},{4}}, {{2,4},{1},{3}}, {{3,4},{1},{2}} 由3个子集组成;集合{{1},{2},{3},{4}}由4个子集组成。
给定正整数 n 和 m ,计算出 n 个元素的集合{1,2,...,n} 可以划分成多少个不同的由 m 个非空子集组成的集合。
Input
每组测试数据的包括一行,n (n≤10)和 m。
Output
输出由m个非空子集组成的集合的数目。每组数据一行,后面跟一个回车。
Sample Input
4 3
Sample Output
6
Hint
https://en.wikipedia.org/wiki/Stirling_numbers_of_the_second_kind
import java.util.Scanner;
/**
* Created by DrownFish on 2016/10/31.
*/
public class Main {
public static void main(String args[]){
Scanner s = new Scanner(System.in);
while(s.hasNext()){
int n = s.nextInt();
int m = s.nextInt();
System.out.println(sets(n,m));
}
}
static int sets(int n,int m){
if(m==1||n==m)
return 1;
else
return sets(n-1,m-1)+sets(n-1,m)*m;
}
}