概率期望 WOJ 3808 Red is good
描述
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付 出1美元。可以随时停止翻牌,在最优策略下平均能得到多少钱。
输入
一行输入两个数R,B,其值在0到5000之间
输出
在最优策略下平均能得到多少钱。
样例输入
5 1
样例输出
4.166666
提示
输出答案时,小数点后第六位后的全部去掉,不要四舍五入.
题解
设f[i][j]为第i张红牌第j张黑牌是的期望
易得出f[i][j]=(f[i-1][j]+1)*i/(i+j)+(f[i][j-1]-1)*j/(i+j)
当f[i][j]<0时f[i][j]=0
开滚动数组不然会爆
代码
#include<bits/stdc++.h>
using namespace std;
double f[2][5005];
int r,b,now=0;
//( f[i-1][j]+1)*(i/(j+i)) + (f[i][j-1]-1)*(j/(i+j)))
int main()
{
scanf("%d%d",&r,&b);
for(int i=1;i<=r;i++)
{
now^=1;
f[now][0]=i;
for(int j=1;j<=b;j++)
{
double temp=(f[now][j-1]-1)*((double)j/(double)(j+i))+(f[now^1][j]+1)*((double)i/(double)(i+j));
f[now][j]=temp>0?temp:0;
}
}
printf("%.6lf",f[now][b]-0.0000005);
}

浙公网安备 33010602011771号