• 联合周赛第二场 我在哪?题解


    题目连接:http://120.78.128.11/Problem.jsp?pid=3266

    作为签到题,还是很多人过了的,这个题的做法有两种。

    1、动态规划,很简单的,看代码吧:

     1 #include<cstdio>
     2 #define N 11
     3 double f[N][N];
     4 int main()
     5 {
     6     int n;
     7     double a,b;
     8     scanf("%d",&n);
     9     scanf("%lf%lf",&a,&b);
    10     f[0][0]=1;
    11     for (int i=1;i<=n;++i)
    12     {
    13         f[0][i]=f[0][i-1]*a;
    14         f[i][0]=f[i-1][0]*b;
    15     }
    16     for (int i=1;i<=n;++i)
    17     {
    18         for (int j=1;j<=n;++j)
    19         {
    20             f[i][j]=f[i][j-1]*a+f[i-1][j]*b;
    21         }
    22     }
    23     /*
    24     for (int i=0;i<=n;++i)
    25     {
    26         for (int j=0;j<=n;++j)
    27         {
    28             printf("%.2f ",f[i][j]);
    29         }
    30         puts("");
    31     }*/
    32     int q;
    33     scanf("%d",&q);
    34     int m,x,y;
    35     while (q--)
    36     {
    37         scanf("%d%d%d",&m,&x,&y);
    38         if (x+y==m)
    39         {
    40             printf("%.2f
    ",f[y][x]);
    41         }
    42         else
    43         {
    44             printf("0.00
    ");
    45         }
    46 
    47     }
    48     return 0;
    49 }
    View Code

    2、数学方法,走m步,有x步向上,所以答案是C(n,x)*a^x*b^y

     1 #include<stdio.h>
     2 #include<math.h>
     3 typedef long long ll;
     4 int C(int n,int m)
     5 {
     6     if(m>n)return 0;
     7     ll a=1,b=1;
     8     for(int i=1;i<=m;i++)
     9     {
    10         a*=(n+i-m);
    11         b*=i;
    12     }
    13     return a/b;
    14 }
    15 int main()
    16 {
    17     int n;
    18     scanf("%d",&n);
    19     double a,b;
    20     scanf("%lf%lf",&a,&b);
    21     int q;
    22     scanf("%d",&q);
    23     while(q--)
    24     {
    25         int m,x,y;
    26         scanf("%d%d%d",&m,&x,&y);
    27         if(x+y!=m)
    28         {
    29             puts("0.00");
    30             continue;
    31         }
    32         else
    33         {
    34             printf("%.2f
    ",C(m,x)*pow(a,x)*pow(b,y));
    35         }
    36     }
    37     return 0;
    38 }
    View Code

    这题有个坑,当m!=x+y的时候要直接输出0.00

  • 相关阅读:
    正则表达式
    小弟新从csdn搬迁到博客园,欢迎大家关注
    做完牛腩新闻发布系统之后的收获(牛腩总结)
    ValidateRequest="false" 无效
    sql server小技巧-自动添加时间与主键自增长
    css初接触
    Spark的Rpct模块的学习
    插入排序
    选择排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/xseventh/p/8601128.html
Copyright © 2020-2023  润新知