爱奇艺第二题 AC代码,顺便求大佬第一题的解答
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int nRed=in.nextInt();
int nBlue=in.nextInt();
if(nRed==0) {
System.out.format("%.5f",0);
return;
}
if(nBlue==0) {
System.out.format("%.5f",1);
return;
}
//TODO STEP
double nRedf=nRed;
double nBluef=nBlue;
System.out.format("%.5f",dfs(nRedf,nBluef,new double[nRed+1][nBlue+1]));
}
private static double dfs(double nRedf,double nBluef,double[][] memo){
if(Double.compare(nRedf,0.f)<=0) return 0;
if(Double.compare(nBluef,0.f)<=0) return 1;
if(Double.compare(memo[(int)nRedf][(int)nBluef],0.f)!=0) return memo[(int)nRedf][(int)nBluef];
double ans=nRedf/(nRedf+nBluef);
double result1=0.f;
if(nBluef>=3){
result1=(nBluef/(nBluef+nRedf))*(nBluef-1)/(nBluef+nRedf-1)*(nBluef-2)/(nBluef+nRedf-2);
result1*=dfs(nRedf,nBluef-3,memo);
}
double result2=0.f;
if(nBluef>=2) {
result2 = (nBluef / (nBluef + nRedf)) * (nBluef - 1) / (nBluef + nRedf - 1) * (nRedf) / (nBluef + nRedf - 2);
result2*=dfs(nRedf-1,nBluef-2,memo);
}
memo[(int)nRedf][(int)nBluef]=ans+result1+result2;
return ans+result1+result2;
} #爱奇艺##题解#
