Red is Good
gdfzoj470
先贴题目
Problem Description
桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元。
可以随时停止翻牌,在最优策略下平均能得到多少钱。 输出答案时,小数点后第六位后的全部去掉,不要四舍五入.
Input
一行输入两个数R,B,其值在0到5000之间
Output
在最优策略下平均能得到多少钱。
Sample Input
5 1
Sample Output
4.166666
解法
这道题只要顺着从一张都不取到到取满所有红牌黑牌,既是用 e[i-1][j]
和e[i][j-1]
更新e[i][j]
用公式
当收益小于0时,取0;
最后输出(e[r][b]);
#include<iostream>
#include<cstdio>
using namespace std;
int r,b;
double e[1001][1001];
int main(){
scanf("%d%d",&r,&b);
for (int i=0;i<=r;i++) for (int j=0;j<=b;j++) {
if (i>0) e[i][j]+=((double)i/(i+j))*(double)(e[i-1][j]+1);
if (j>0) e[i][j]+=((double)j/(i+j))*(double)(e[i][j-1]-1);
e[i][j]=(e[i][j]<0)?0:e[i][j];
}
printf("%.6f",e[r][b]-0.0000005);
}