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

#爱奇艺##题解#
全部评论

相关推荐

不愿透露姓名的神秘牛友
06-20 20:30
点赞 评论 收藏
分享
评论
1
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务