LightOJ 1326 – Race 第二类Stirling数/

简单的模板题。 **题意:**问n匹马出现的不同排名数。 **题解:**可以使用DP,本质上还是第二类Stirling数(隔板法)
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <stack>
#include <queue>
#define LL long long
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;

const int INF = 0x3f3f3f3f;
const int N = 1e5+2000;

LL dp[1010][1010];
LL ans[1010];
LL solve()
{

MMF(dp);
dp[0][0] = 1;
for(int i = 1; i <= 1000; i++)
{
ans[i] = 0;
for(int j = 1; j <= i; j++)
{
if(j == i)
dp[i][j] = 1;
//原有i-1个人内挑选一种名次作为新的人的名次,原有i-1人j-1内插入一个排名
dp[i][j] = (dp[i-1][j]*j + dp[i-1][j-1]*j)% 10056;
ans[i] = (ans[i]+dp[i][j])%10056;
}
}
}
int main()
{
int T;
int cnt = 0;
solve();
cin >> T;
while(T--)
{
LL n;
scanf("%lld", &n);

printf("Case %d: %lld\n", ++cnt, ans[n]);
}
return 0;
}
posted @ 2016-10-28 16:02  Lweleth  阅读(163)  评论(0编辑  收藏  举报