版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
第二类斯特林数:n 个不同的小球放进 r 个 相同的盒子
:n 个不同的小球放进 r 个相同的盒子
:最后一个小球单独放进一个盒子里面
:前面 n - 1个球放进了 r 个盒子里面,最后一个球放进 r 个盒子里面的任意一个球
// 第二类斯特林数 n个不同的球放进r个相同的盒子
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2000 + 7;
typedef long long ll;
const ll mod = 1000; // 取模
ll S[maxn][maxn]; // 第二类斯特林数
void init()
{
S[0][0] = 0, S[1][1] = 1;
for(ll i = 2; i < maxn; i++) {
for(ll j = 1; j <= i; j++) S[i][j] = (S[i-1][j-1] % mod + j % mod * S[i-1][j] % mod) % mod;
}
}
int main()
{
init();
int t, n;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
ll ans = 0;
for(int i = 1; i <= n; i++) ans = (ans + S[n][i]) % mod;
printf("%lld\n", ans);
}
return 0;
}