题目要求算出大小关系的所有情况,我们把相等的放在一起,他们之间没有大小关系,形成分组,这个就是由第二类斯特灵数算出来的,在对分好的组进行全排列。
1 #include<stdio.h> 2 typedef long long i64; 3 int main() 4 { 5 int T,n; 6 i64 s[150][150],f[150]; 7 scanf("%d",&T); 8 f[0]=1; 9 for(int i=1;i<=100;i++) 10 { 11 s[i][i]=1;s[i][1]=1;f[i]=f[i-1]*i%20090126; 12 } 13 for(int i=2;i<=100;i++) 14 for(int j=2;j<=i;j++) 15 s[i][j]=(s[i-1][j-1]+j*s[i-1][j])%20090126; 16 while(T--) 17 { 18 i64 sum=0; 19 scanf("%d",&n); 20 for(int i=1;i<=n;i++) 21 sum+=f[i]*s[n][i]%20090126; 22 printf("%d ",sum%20090126); 23 } 24 return 0; 25 }