Neutralzz的博客

我有自己的梦想和追求!

Codeforces 148D 概率DP 水题

设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;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26572969/article/details/46815287
个人分类: DP Codeforces
上一篇HDU 3681 Prison Break (状压DP+二分)
下一篇SGU 495 Kids and Prizes (概率DP入门)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭