题目链接
dp[i][j]表示i匹马j个排名
与前面的马同时到达+单独到达
dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%Mod*j%Mod;
还是可以预处理出来查表
#include<cstdio>
const int N=1e3+10;
const int mod=10056;
int dp[N][N],sum[N];
void init()
{
dp[0][0]=1;
for(int i=1;i<=1000;i++)
{
int ans=0;
for(int j=1;j<=i;j++)
{
dp[i][j]=(dp[i-1][j-1]+dp[i-1][j])%mod*j%mod;
ans=(ans+dp[i][j])%mod;
}
sum[i]=ans;
}
}
int main()
{
int t;
init();
scanf("%d",&t);
for(int ca=1;ca<=t;ca++)
{
int n;
scanf("%d",&n);
printf("Case %d: %d\n",ca,sum[n]);
}
return 0;
}