题解:组合数学的知识,推理一下即可。
#include <stdio.h> #include <string.h> #define N 2001 int total[N][N]; void compute_total(){ int i,j; for(i = 0; i < N; i ++){ total[i][0] = 0; total[i][1] = 1; total[i][i] = 1; } for( i = 2; i < N; i ++){ for(j = 2; j < i; j++ ){ total[i][j] = (total[i-1][j] * j + total[i-1][j-1])%1000; } } } int main(){ int i,n,t,num,all; compute_total(); scanf("%d",&t); while(t--){ all=0; scanf("%d",&num); for(i = 1; i <= num; i ++){ all=(all+total[num][i])%1000; } printf("%d\n",all); } return 0; }