爱奇艺笔试第二题思路

哪位大佬给一下红蓝球思路啊啊啊。。。#爱奇艺##笔试题目#
全部评论
第一题是leetcode903原题 第二题动态规划:dp[i][j]表示i个红球和j个蓝球A的获胜概率.如果i=0,dp[i][j]=0.如果j=0,dp[i][j]=1.否则的话dp[i][j]由下列步骤求得: dp[i][j]+=i/(i+j);//表示A直接取得红球的概率 如果j=1,那么dp[i][j]+=0.A取蓝球之后,B肯定获胜 如果j=2,dp[i][j]+=j/(i+j)*(j-1)/(i+j-1)*dp[i-1][j-2];j/(i+j)是A取蓝球的概率,在A取蓝球的基础上B再取蓝球A才有获胜机会,所以(j-1)/(i+j-1)表示B再取蓝球的概率,然后C只能从红球选一个,在ABC选一轮后,A的获胜概率就要加上dp[i-1][j-2],所以A获胜的概率为j/(i+j)*(j-1)/(i+j-1)*dp[i-1][j-2]; 如果j>2,dp[i][j]+=j/(i+j)*(j-1)/(i+j-1)*(i/(i+j-2)*dp[i-1][j-2]+(j-2)/(i+j-2)*dp[i][j-3]);i/(i+j-2)*dp[i-1][j-2]+(j-2)/(i+j-2)*dp[i][j-3]表示A从蓝球选一个,B从蓝球选一个后,C分别从红球蓝球取出一个的A的获胜概率.
点赞 回复 分享
发布于 2019-09-08 17:12
#include<bits/stdc++.h> using namespace std; int main() {     int n,m;     cin>>n>>m;     double dp[n+1][m+1];     for(int i=0;i<n+1;i++) {dp[i][0]=1;}     for(int i=0;i<m+1;i++) {dp[0][i]=0;}     dp[0][0]=0;     for(int x=1;x<n+1;x++) {         for(int y=1;y<m+1;y++) {             double i=x,j=y,p1=i/(i+j),p2=j/(i+j),p3=0,p4=0;             if (y-2>=0) p3=p2*(i/(i+j-1))*((j-1)/(i+j-2));             if (y-3>=0) p4=p2*((j-1)/(i+j-1))*((j-2)/(i+j-2));             dp[x][y]=p1+p3*dp[x-1][y-2]+p4*dp[x][y-3];         }     }     printf("%.5f",dp[n][m]);     return 0; }
点赞 回复 分享
发布于 2019-09-08 17:06
点赞 回复 分享
发布于 2019-09-08 17:01
第二题AC思路如下:
点赞 回复 分享
发布于 2019-09-08 16:33
第一题,直接输出3,过18…… 第二题,直接计算第一轮A拿到红球,n/n+m,过9……我太菜了
点赞 回复 分享
发布于 2019-09-08 18:30
递推或者递归
点赞 回复 分享
发布于 2019-09-08 17:59
第一题36的代码就是全排列,然后长度等于n的话就做条件验证。  类似的题见https://www.luogu.org/problem/P2606。看大佬们看不看得懂了。
点赞 回复 分享
发布于 2019-09-08 16:37
算了先删掉等结束再放吧= =
点赞 回复 分享
发布于 2019-09-08 16:32
第二题ac思路:
点赞 回复 分享
发布于 2019-09-08 16:21
弱渣做法…求出所有1-n的全排列 然后一个个判断 只过18 比较这样会超时…
点赞 回复 分享
发布于 2019-09-08 16:20
求代码
点赞 回复 分享
发布于 2019-09-08 16:18
27的路过
点赞 回复 分享
发布于 2019-09-08 16:16
第一题剪枝只过36,
点赞 回复 分享
发布于 2019-09-08 16:15
第一题有思路嘛
点赞 回复 分享
发布于 2019-09-08 16:14

相关推荐

09-18 20:41
门头沟学院 Java
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
评论
1
13
分享

创作者周榜

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