GFOJ470(dhr_dalao)

来源:互联网 发布:知乎 匿名信 丁香园 编辑:程序博客网 时间:2024/05/22 09:17

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

Input
一行输入两个数R,B,其值在0到5000之间

Output
在最优策略下平均能得到多少钱。

Sample Input
5 1

Sample Output
4.166666

设f[i,j]为拿i张红牌,拿j张黑牌的期望,则

f(i,j)=ii+j(f(i1,j)+1)+ji+j(f(i,j1)1);

#include <cstdio> double f[5010][5010];int R,B;int main(){    scanf("%d%d",&R,&B);    for (int i=0; i<=R; i++)        for (int j=0; j<=B; j++){            if (i>0) f[i][j]+=(double)i/(double)(i+j)*(f[i-1][j]+1);            if (j>0) f[i][j]+=(double)j/(double)(i+j)*(f[i][j-1]-1);            if (f[i][j]<0) f[i][j]=0;        }    printf("%.6f",f[R][B]-0.0000005);}
0 0
原创粉丝点击