集合的所有划分
思路1:第二类斯特林数的和
AC代码
第二类斯特林数的和
/*
贝尔数
*/
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn = 2000;
const int mod = 1000;
int Stirling2[maxn + 5][maxn + 5];
void SolveS2(){
memset(Stirling2, 0, sizeof(Stirling2));
Stirling2[1][1] = 1;
for(int i = 2; i <= maxn; ++i){
for(int j = 1; j <= i; ++j){
Stirling2[i][j] = (Stirling2[i - 1][j - 1] + j * Stirling2[i - 1][j]) % mod;
}
}
}
int main (){
SolveS2();
int T, N;
cin >> T;
int Ans = 0;
while(T--){
Ans = 0;
scanf("%d", &N);
for(int i = 1; i <= N; i++){
Ans = Ans + (Stirling2[N][i]) % mod;
}
Ans %= mod;
printf("%lld\n", Ans);
}
}
思路二:公式求贝尔数