zoukankan      html  css  js  c++  java
  • UVa 12034 比赛名次(递推)

    https://vjudge.net/problem/UVA-12034

    题意:

    A、B两人赛马,最终名次有3种可能:并列第一;A第一B第二;B第一A第二。输入n,求n人赛马时最终名次的可能性的个数除以10056的余数。

    思路:

    设答案为f(n),假设第一名有i个人,接下来就会有f(n-i)种可能性,所以答案为

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<queue>
     6 using namespace std;
     7 
     8 const int maxn=1000+100;
     9 #define mod 10056
    10 
    11 int c[maxn][maxn];
    12 int f[maxn];
    13 
    14 void init()
    15 {
    16     for(int i=0;i<maxn;i++)
    17     {
    18         c[i][0]=1;
    19         for(int j=1;j<=i;j++)
    20         {
    21             c[i][j]=c[i-1][j-1]+c[i-1][j];
    22             c[i][j]%=mod;
    23         }
    24     }
    25 }
    26 
    27 int solve(int n)
    28 {
    29     if(f[n])  return f[n];
    30     for(int i=1;i<=n;i++)
    31     {
    32         f[n]+=c[n][i]*solve(n-i);
    33         f[n]%=mod;
    34     }
    35     return f[n];
    36 }
    37 
    38 int main()
    39 {
    40     int T;
    41     scanf("%d",&T);
    42     init();
    43     f[0]=1;
    44     for(int kase=1;kase<=T;kase++)
    45     {
    46         int n;
    47         scanf("%d",&n);
    48         solve(n);
    49         printf("Case %d: %d
    ",kase,f[n]);
    50     }
    51 }
  • 相关阅读:
    JavaScript闭包
    模块模式——方法
    产品与技术
    读书笔记
    屌丝求职记
    正则表达式regex狂记
    css狂记
    html狂记
    Android狂记忆
    关于调式
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6687109.html
Copyright © 2011-2022 走看看