/*
1.跟别的元素一同组成一个子集合,即(n-1)个元素组成m个非空子集,再将这个元素插入这m个非空子集合当中,有m中可能.公式表达为:
m*f(n-1,m)
2.这个元素自己独立形成一个集合,另外的(n-1)个元素形成(m-1)个非空子集合.公式表达为:
f(n-1,m-1)
故得公式为:
f(n,m)=m*f(n-1,m)+f(n-1,m-1)
*/
#include<stdio.h>
#include<string.h>
const int mod=1000;
const int maxn=2005;
int str[maxn][maxn];//i 个数分成 非空j个集合
int num[maxn];
int main(){
int T,n;
int i,j,k;
memset(str,0,sizeof(str));
str[0][0]=str[1][1]=1;num[1]=1;
for(i=2;i<maxn;i++){
for(j=1;j<=i;j++){
str[i][j]=(str[i-1][j-1]+j*str[i-1][j])%mod;
num[i]=(num[i]+str[i][j])%mod;
}
}
scanf("%d\n",&T);
while(T--){
scanf("%d",&n);
printf("%d\n",num[n]);
}
return 0;
}
HDU 一卡通大冒险
最新推荐文章于 2020-08-14 11:29:20 发布