爱奇艺第二题 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; }
#爱奇艺##题解#