zoukankan      html  css  js  c++  java
  • UVA-12304 Race(递推)

    题目大意:求n个人比赛的所有可能的名次种数。比如:n=2时,有A第一B第二、B第一A第二、AB并列第一三种名次。

    题目解析:既然是比赛,总有第一名。第一名的人数可能是i (1≤i≤n),则剩下待定的人数就是n-i......

    设 f(n)为n个人比赛时的名次种数。则 f(n)= ∑ C(n,i)f(n-i)  (1≤ i ≤n)

    这道题和前一道 “How to add?” 类似。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    const int mod=10056;
    int c[1005][1005];
    int f[1005];
    void init()
    {
        int i,j;
        c[1][0]=c[1][1]=1;
        for(i=2;i<=1000;++i){
            c[i][0]=1;
            for(j=1;j<=i;++j)
                c[i][j]=(c[i-1][j]%mod+c[i-1][j-1]%mod)%mod;
        }
    }
    void init1()
    {
        memset(f,0,sizeof(f));
        int i,j;
        f[0]=0;
        f[1]=1;
        for(i=2;i<=1000;++i){
            for(j=i;j>=1;--j){
                f[i]+=(c[i][j]*f[i-j]);
                f[i]%=mod;
            }
            ++f[i];
            f[i]%=mod;
        }
    }
    int main()
    {
        //freopen("UVA-12034 Race.txt","r",stdin);
        init();
        init1();
        int T,i,n,cas=0;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            printf("Case %d: %d ",++cas,f[n]);
        }
        return 0;
    }


  • 相关阅读:
    第五百五十二天 how can I 坚持
    第五百五十一天 how can I 坚持
    第五百五十天 how can I 坚持
    第五百四十七、八、九 how can I 坚持
    第五百四十六天 how can I 坚持
    第五百四十五天 how can I 坚持
    第五百四十四 how can I 坚持
    第五百四十一、二、三天 how can I 坚持
    第五百四十天 how can I 坚持
    MySql
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4677157.html
Copyright © 2011-2022 走看看