码迷,mamicode.com
首页 > 其他好文 > 详细

UVA 12034 Race

时间:2015-11-14 16:25:41      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

递推,f[i = i个名次][j = 共有j个人] = 方案数。

对于新加入的第j个人,如果并列之前的某个名次,那么i不变,有i个可供并列的名次选择,这部分是f[i][j-1]*i,

如果增加了一个名次,那么之前有i-1个名次,i-1个名次之间有i个空,这部分是f[i-1][j-1]*i。

/*********************************************************
*      --------------Tyrannosaurus---------              *
*   author AbyssalFish                                   *
**********************************************************/
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

const int mod = 10056;
const int maxn = 1001;
int f[maxn][maxn];//i个名次 j个人
int ans[maxn];

/*
思路二 看成多次选第一名有多少个人
*/

//#define LOCAL
int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif
    //cout<<mod*mod<<endl;
    int T, n, kas = 0; scanf("%d",&T);

    f[0][0] = 1;
    for(int i = 1; i < maxn; i++){
        for(int j = i; j < maxn; j++){
            f[i][j] = (f[i-1][j-1]+f[i][j-1])*i;
            if(f[i][j] >= mod) f[i][j] %= mod;
        }
    }
    for(int j = 1; j < maxn; j++){
        for(int i = 1; i <= j; i++){ //i <= j
            ans[j] += f[i][j];
        }
        if(ans[j] >= mod) ans[j] %= mod;
    }
    while(T--){
        scanf("%d",&n);
        printf("Case %d: %d\n", ++kas, ans[n]);
    }
    return 0;
}

 

UVA 12034 Race

标签:

原文地址:http://www.cnblogs.com/jerryRey/p/4964520.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!