关闭

Codeforces 148D 概率DP 水题

292人阅读 评论(0) 收藏 举报
分类:

设dp[i][j] 为剩余i个白球,j个黑球的公主的胜率。

可以推出公式 dp[i][j] = 1.0*i / (i + j) + 1.0*j * (j - 1) * (i*dp[i-1][j-2] + (j - 2) * dp[i][j-3]) / (i + j) / (i + j - 1) / (i + j - 2) 。

注意一下边界。


代码:

#include<cstdio>
#include<iostream>

using namespace std;
const int maxn = 1005;

double dp[maxn][maxn];
int w,b;

int main(){
    scanf("%d%d",&w,&b);
    for(int i=0;i<=w;i++){
        for(int j=0;j<=b;j++){
            if(i == 0){
                dp[i][j] = 0;continue;
            }
            if(j == 0){
                dp[i][j] = 1;continue;
            }
            if(j == 1){
                dp[i][j] = 1.0*i / (i + j);continue;
            }
            if(j == 2){
                dp[i][j] = 1.0*i / (i + j) +  1.0* j * (j - 1) * dp[i-1][j-2] / (i + j) / (i + j - 1);continue;
            }
            dp[i][j] = 1.0*i / (i + j) + 1.0*j * (j - 1) * (i*dp[i-1][j-2] + (j - 2) * dp[i][j-3]) / (i + j) / (i + j - 1) / (i + j - 2);
        }
    }
    printf("%.9f\n",dp[w][b]);
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34416次
    • 积分:2529
    • 等级:
    • 排名:第14552名
    • 原创:228篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类