zoukankan      html  css  js  c++  java
  • 抓老鼠 codeForce 148D

    设dp[i][j]为有白老鼠i只,黑老鼠j只时轮到公主取时,公主赢的概率。

    那么当i = 0 时,为0

    当j = 0时,为1

    公主可直接取出白老鼠一只赢的概率为i/(i+j)

    公主取出了黑老鼠,龙必然也要取出黑老鼠公主才能赢,跑出来的老鼠有两种可能

    跑出来的是黑老鼠,公主赢的概率为dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3].(j>=3)

    跑出来的是白老鼠,公主赢的概率为dp[i][j] += j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2].(j>=2)

    贴代码:

     1 #include <cstdio>
     2 #define N 1005
     3 double dp[N][N];
     4 int main()
     5 {
     6 //    freopen("in.c","r",stdin);
     7     int w,b;
     8     scanf("%d%d",&w,&b);
     9     for(int i=0; i<=w; ++i) dp[i][0] =1;
    10     for(int i=0; i<=b; ++i) dp[0][i] =0;
    11     for(int i=1; i<=w; ++i)
    12     {
    13         for(int j=1; j<=b; ++j)
    14         {
    15             dp[i][j] = (double)i/(i+j);
    16             if(j >= 3) dp[i][j] += (double)j/(i+j)*(double)(j-1)/(i+j-1)*(double)(j-2)/(i+j-2)*dp[i][j-3];
    17             if(j >= 2) dp[i][j] += (double)j/(i+j)*(double)(j-1)/(i+j-1)*(double)i/(i+j-2)*dp[i-1][j-2];
    18         }
    19     }
    20     printf("%.9lf
    ",dp[w][b]);
    21     return 0;
    22 }
    View Code
  • 相关阅读:
    获取comboBox里面的item使用的方法
    QT格式化代码
    按键槽的写法
    int to String
    sprintf在51单片机中的使用
    学习使用MarkDown
    分享9款超酷的jQuery/CSS3插件
    2014年展望
    操作系统面试
    web一点小结
  • 原文地址:https://www.cnblogs.com/allh123/p/3264981.html
Copyright © 2011-2022 走看看