clay17闲来无事和青雀一起摸鱼。
桌面上现有A张“摸鱼牌”和B张“普通牌”, 随机打乱顺序后放在桌面上,开始一张一张地翻牌。
翻到摸鱼牌,青雀可以安全的摸鱼,快乐指数$+1$;
翻到普通牌,青雀则会担心这是符玄要来抓自己的不好兆头,快乐指数$-1$。
青雀最初快乐指数为$0$,并且在翻牌过程中可以随时停止翻牌,青雀在最优策略下平均快乐指数$S$是多少。
与国庆赛不同的是,这个题会有$T$组不同的局面需要你来处理。
第一行一个数$T$($T\le10000$)
接下来$T$行,每行两个数字$A$,$B$($A,B\le1000$)
输出$T$行,每行一个数表示$S$的值,保留六位小数
1
10 10
1.607228
#include <stdio.h>
#include <math.h>
#define MR 1005
#define MB 1005
#define E 1e-5
#define jz -1e10
int R,B,T,f;
double dp[MR][MB];
double dfs(int r,int b)
{
double xr=r/(r+b);
dp[r-1][b]=dfs(r-1,b);
double xb=b/(r+b);
dp[r][b-1]=dfs(r,b-1);
dp[r][b]=(dp[r-1][b]+1)*xr+(dp[r][b-1]-1)*xb;
if(dp[r][b]<0) dp[r][b]=0;
return dp[r][b];
}
int main() {
scanf("%d",&T);
while(T--){
scanf("%d%d",&R,&B);
for(int i=0;i<=R;i++)
for(int j=0;j<=B;j++)
dp[i][j]=jz;
for(int i=1;i<=R;i++) dp[i][0]=i;
for(int i=0;i<=B;i++) dp[0][i]=0;
printf("%.6f\n",dfs(R,B));
}
return 0;
}
Author: clay17