33,008
社区成员
发帖
与我相关
我的任务
分享
初始:p(m,n,A)=1
递推:
p(r,b,A)=p(r,b+1,B)
p(r,b,B)=(r+1)/(r+1+b)*p(r+1,b,A)+(b+1)/(r+b+1)*p(r,b+1,A)
目标:P=p(0,1,A)+p(0,1,B)
#include <iostream>
using namespace std;
double result=0;
double pa[1001][4000]={0};
class MarblesInABag
{
public:
double getProbability(int red,int blue)
{
if(red>blue) return 0;
else if(red>1000) return 0;
else if(red==0) return 1;
else if(blue==0) return 0;
else if(pa[red][blue]) return pa[red][blue];
else{
double a=(double)(red)/(double)(red+blue);
double b=(double)(blue)/(double)(red+blue);
pa[red][blue]=a*getProbability(red-1,blue-1)+b*getProbability(red,blue-2);
return pa[red][blue];
}
}
};