题意

题目链接

【题意】
Admin生日那天,Rainbow来找Admin玩扑克牌。玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验。
Rainbow把一副扑克牌(54张)随机洗开,倒扣着放成一摞。然后Admin从上往下依次翻开每张牌,每翻开一张黑桃、红桃、梅花或者方块,就把它放到对应花色的堆里去。
Rainbow想问问Admin,得到A张黑桃、B张红桃、C张梅花、D张方块需要翻开的牌的张数的期望值E是多少?特殊地,如果翻开的牌是大王或者小王,Admin将会把它作为某种花色的牌放入对应堆中,使得放入之后E的值尽可能小。由于Admin和Rainbow还在玩扑克,所以这个程序就交给你来写了。【输入格式】输入仅由一行,包含四个用空格隔开的整数,A,B,C,D。【输出格式】输出需要翻开的牌数的期望值E,四舍五入保留3位小数。如果不可能达到输入的状态,输出-1.000。【数据范围】
0≤A,B,C,D≤15【输入样例】
1 2 3 4【输出样例】
16.393

题解

这道题目乍一看特别难,一看入门,我佛了,被入门题吊着打。

看了题解才会。

f[a][b][c][d][q][p]f[a][b][c][d][q][p]f[a][b][c][d][q][p],当q==0,p==0q==0,p==0q==0,p==0时,这个表示的是期望拿几张牌能使得目前的牌堆满足要求。

那么qqq表示的就是小王了,当他等于000,表示没找到,当他等于141~41 4时,分别表示化作什么花色。

而ppp同理。

然后DP方程(sum表示拿的牌数):


方程来自:https://blog.csdn.net/Ronaldo7_ZYB/article/details/89526291

当然这坨式子这么长,当然用记忆化搜索是最简单实现的啦。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define  N  20
using  namespace  std;
double  dp[N][N][N][N][6][6];
inline  double  mymin(double  x,double  y){return  x<y?x:y;}
int  a,b,c,d;
double  dfs(int  a1,int  a2,int  a3,int  a4,int  q,int  p)
{if(dp[a1][a2][a3][a4][q][p]>1e-8)return  dp[a1][a2][a3][a4][q][p];if(a1+(q==1)+(p==1)>=a  &&  a2+(q==2)+(p==2)>=b  &&  a3+(q==3)+(p==3)>=c  &&  a4+(q==4)+(p==4)>=d)return  0;int  cnt=a1+a2+a3+a4+(q!=0)+(p!=0);dp[a1][a2][a3][a4][q][p]=1.0;//把所有的概率加在一起得到的这个1if(a1<13)dp[a1][a2][a3][a4][q][p]+=dfs(a1+1,a2,a3,a4,q,p)*(13-a1)/(54-cnt);if(a2<13)dp[a1][a2][a3][a4][q][p]+=dfs(a1,a2+1,a3,a4,q,p)*(13-a2)/(54-cnt);if(a3<13)dp[a1][a2][a3][a4][q][p]+=dfs(a1,a2,a3+1,a4,q,p)*(13-a3)/(54-cnt);if(a4<13)dp[a1][a2][a3][a4][q][p]+=dfs(a1,a2,a3,a4+1,q,p)*(13-a4)/(54-cnt);if(q==0)dp[a1][a2][a3][a4][q][p]+=mymin(mymin(dfs(a1,a2,a3,a4,1,p),dfs(a1,a2,a3,a4,2,p)),mymin(dfs(a1,a2,a3,a4,3,p),dfs(a1,a2,a3,a4,4,p)))/(54-cnt);if(p==0)dp[a1][a2][a3][a4][q][p]+=mymin(mymin(dfs(a1,a2,a3,a4,q,1),dfs(a1,a2,a3,a4,q,2)),mymin(dfs(a1,a2,a3,a4,q,3),dfs(a1,a2,a3,a4,q,4)))/(54-cnt);return  dp[a1][a2][a3][a4][q][p];
}
int  main()
{scanf("%d%d%d%d",&a,&b,&c,&d);if (max(a-13,0)+max(b-13,0)+max(c-13,0)+max(d-13,0)>2){printf("-1.000\n");return  0;}//无解判断double  ans=dfs(0,0,0,0,0,0);printf("%.3lf\n",ans);return  0;
}

0x30数学知识(0x38 概率与数学期望)例题3:扑克牌(题解)相关推荐

  1. 如何用数学知识提升情商?数学学霸们的6大思维习惯

    引言:成为一名"数学学霸"显然不是一件轻松的工作,不仅需要"高智商"的支持,还一不小心就被套上了"情商低""Nerd"的 ...

  2. 计算机竞赛的数学知识,可以参加的数学类和计算机类竞赛有哪些?

    有哪些数学与计算机类的竞赛含金量比较高,值得投入时间和精力的呢?今天我们就来着重为大家介绍四项竞赛,并和大家说一说在规划竞赛活动时有哪些应该注意的事项. 01. 美国数学竞赛 美国数学竞赛 ameri ...

  3. 计算机学的数学知识竞赛题及答案,数学知识竞赛题

    数学竞赛题 选择题: 1.煮一个鸡蛋需要2分钟,如果煮四个鸡蛋需要( )分钟 A 2分 B 4分钟 C 6分钟 D八分钟 2.小明在镜子中看到石英钟世6:00,这时的实际时间是( )时 A.6:00 ...

  4. 程序员需要学习太多数学知识吗?

    如果你想当一个顶级程序员,梦想着改变世界,那么数学对你来说就很重要了." 数学对我们每一个程序员来说,都是最熟悉的陌生人.你从小就开始学习数学,那些熟悉的数学定理和公式陪伴你走过好多年.但是 ...

  5. 计算领域中的数学知识都有哪些?

    二进制是计算机系统的基础,余数被运用在很多常见的算法和数据结构中,而布尔代数是编程中控制逻辑的灵魂. 二进制.余数和布尔代数 1 二进制 许多专业人士都认为计算机的起源来自数学中的二进制计数法.这样的 ...

  6. C 编程语言多少数学知识,编程,需要多少英语,数学知识?初中毕业直接修编程,会不会太快。学不进?...

    编程,需要多少英语,数学知识?初中毕业直接修编程,会不会太快.学不进?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 编 ...

  7. 数学在生活中无处不在,36个生活小故事涵盖小学所有的数学知识!

    数学不是脱离生活的,而是源于生活,更要回归于生活.解决生活中遇到的问题,就是最自然的数学应用题. 生活场景中的学习,是最生动的体验式学习机会.用学到的数学知识来解决生活中的问题,正是孩子体会数学奥妙的 ...

  8. 算法基础课-数学知识

    数学知识 第四章 数学知识 数论 质数 约数 欧拉函数 欧拉定理与费马小定理 拓展欧几里得定理 裴蜀定理 中国剩余定理 快速幂 高斯消元 求组合数 卡特兰数 容斥原理 博弈论 Nim游戏 SG函数 第 ...

  9. 计算机的数学知识的手抄报图片大全,数学知识手抄报大全

    老师又要求做手抄报了?但是一点头绪都没有怎么办?没关系,下面是学习啦小编为大家带来的数学知识手抄报图片及资料,希望大家喜欢. 数学知识手抄报图片欣赏 数学知识手抄报图片一 数学知识手抄报图片二 数学知 ...

最新文章

  1. vs2010设置boost开发环境
  2. 信息保留的二值神经网络IR-Net,落地性能和实用性俱佳 | CVPR 2020
  3. vs2010无法调试JS
  4. Android Launch Mode的学习记录
  5. boost::mpl::advance相关用法的测试程序
  6. 2021东京奥运会数据接口
  7. 深入学习c++--智能指针(三) unique_ptr
  8. Fragment之三:根据屏幕尺寸加载不同的Fragment
  9. 树莓派3B+,我要跑.NET CORE
  10. c mysql 查询超时设置_MySQL查询超时的设置方法
  11. jmeter(二十二)内存溢出原因及解决方法
  12. html 输入类型,HTML 输入类型(示例代码)
  13. 湘潭比赛有感---铩羽之行
  14. 使用Cgroup在Docker中进行资源管理
  15. 软件大全 -- FreeSoftware
  16. 阿里研究院副院长:数字化转型的十个本质
  17. fiddler手机抓包抖音无网问题
  18. mysql用update方法更改用户密码
  19. HTML+CSS实现心形效果
  20. Git_GitHub——基本操作、创建远程库、远程库操作、团队协作、SSH免密登录

热门文章

  1. 常用软件开发模型的介绍
  2. 计算机专业论文可行性研究怎么写,计算机论文怎么写?
  3. 牛客小白月赛60(A~C)题解
  4. 实验七 二极管包络检波实验
  5. Django使用新浪邮箱发送邮件
  6. HTML+CSS+JS仿百度导航(包括下拉框等)
  7. UART 波特率选择的认识与理解
  8. python123课题的答案_python 练习 选课系统 项目
  9. jenkins构建报错“Error occurred during initialization of VMCould not reserve enough space for 2097152KB”
  10. Windows7下载钉钉DingTalk直播回放视频到本地