zoukankan      html  css  js  c++  java
  • HDU 3076:ssworld VS DDD

    ssworld VS DDD

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=3076

    题意:

    有两个人玩游戏,分别投骰子,谁的点数小谁掉一点血,两人分别有HP1、HP2点血(1≤HP1,HP2≤2000),给出两人分别掷出1~6的概率,求第一个人赢(也就是第二个人的HP掉到0了)的概率。

    题解:

    一道水题,但是直接写会超内存,模拟下滚动数组做,且这类题要注意一人的HP为0后游戏就结束了

                  

    代码

    #include<stdio.h>
    #include<string.h>
    const int N=2002;
    double dp[N],so[N];
    double A[7],B[7],AW,BW,res,SW;
    int main()
    {
      int n,m;
      while(~scanf("%d%d",&m,&n))
      {
        memset(dp,0,sizeof(dp));
        memset(so,0,sizeof(so));
        for(int i=1;i<=6;++i)
        scanf("%lf",&A[i]);
        for(int i=1;i<=6;++i)
        scanf("%lf",&B[i]);
        AW=BW=res=0;
        for(int i=2;i<=6;++i)
        for(int j=1;j<i;++j)
        AW+=A[i]*B[j];// AW是A的点数大,B掉血的概率
        for(int i=2;i<=6;++i)
        for(int j=1;j<i;++j)
        BW+=B[i]*A[j];
        SW=AW+BW;//SW是两人点数相同的概率
        AW=AW/SW;
        BW=BW/SW;
        dp[0]=1,so[0]=0;
        double res=0;
        for(int i=0;i<n;++i)
        {
          for(int j=0;j<=m;++j)
          {
            if(i>0&&j<m)dp[j]+=so[j]*BW;
            if(i<n&&j>0)dp[j]+=dp[j-1]*AW;
          }
          res+=dp[m];
          for(int j=0;j<=m;++j)
          so[j]=dp[j],dp[j]=0;
        }
        printf("%.6f ",res);
      }
    }

      

  • 相关阅读:
    ASP.NET的底层体系1
    MVC路由解析---IgnoreRoute
    HTTP协议详解(三)
    HTTP协议详解(二)
    HTTP协议详解(一)
    优化MySQL服务器
    知识管理系列---3.程序实现
    Linux上PHP加入环境变量
    php-fpm 服务
    centos 服务器编译安装apache+php
  • 原文地址:https://www.cnblogs.com/kiuhghcsc/p/5550829.html
Copyright © 2011-2022 走看看