Red is good
阿新 • • 發佈:2017-08-24
size emp spa ron alt opened pri close pan
題目描述
桌面上有R張紅牌和B張黑牌,隨機打亂順序後放在桌面上,開始一張一張地翻牌,翻到紅牌得到1美元,黑牌則付出1美元。可以隨時停止翻牌,在最優策略下平均能得到多少錢。輸入
一行輸入兩個數R,B,其值在0到5000之間輸出
在最優策略下平均能得到多少錢。 solution f[i][j]表示當前拿i個紅球,j個黑球時的期望錢數 f[i][j]=max(0,( f[i-1][j]+1)*(i/(j+i)) + (f[i][j-1]-1)*(j/(i+j)) ) f[i][0]=i 由於內存,開滾動數組1 #include<cstdio> 2 #include<cstring> 3code#include<iostream> 4 #define dd double 5 using namespace std; 6 7 int R,B,now; 8 dd f[2][5066]; 9 10 int main(){ 11 12 scanf("%d%d",&R,&B); 13 14 now=0; 15 dd temp; 16 for(int i=1;i<=R;++i) 17 { 18 now^=1; 19 f[now][0]=i; 20 for(int j=1;j<=B;++j) 21 { 22 temp=(f[now][j-1]-1)*(dd)(j)/(dd)(i+j)+(f[now^1][j]+1)*(dd)(i)/(dd)(i+j); 23 f[now][j]=temp>0?temp:0; 24 } 25 } 26 printf("%.6lf",f[now][B]-0.0000005); 27 28 //while(1); 29 }
Red is good