[HbFS-]Red is good

来源:互联网 发布:网络用语ovo什么意思 编辑:程序博客网 时间:2024/04/30 12:43

题目:http://www.gdfzoj.com/oj/problem/470

题意如下:

桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。 输出答案时,小数点后第六位后的全部去掉,不要四舍五入.

这是一道求概率的题
设 E(x, y) 为剩下 x 张红牌, y 张黑牌时的期望值
显然 E(x, y) = (E(x-1, y)+1) * x / (x+y) + (E(x-1, y)-1) * y / (x+y)
同时注意因为随时可以停下,所以 E(x, ,y) = max(E(x, y), 0);
细节见代码

#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int maxn = 5050;int r, b, i, j;double f[maxn][maxn];int main() {    scanf("%d%d", &r, &b);    for(i = 0; i <= r; i++) {        for(j = 0; j <= b; j++) {            if(i) f[i][j] += (double)i / (double)(i+j) * (f[i-1][j] + 1);            if(j) f[i][j] += (double)j / (double)(i+j) * (f[i][j-1] - 1);            f[i][j] = max(f[i][j], 0.0);        }    }    f[r][b] -= 0.0000005;    f[r][b] = fabs(f[r][b]);    printf("%.6lf\n", f[r][b]);    return 0;}
0 0
原创粉丝点击