P2002 扑克牌
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

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。

测试样例1

输入

样例输入1
1 2 3 4

样例输入2
15 15 15 15

输出

样例输出1
16.393

样例输出2
-1.000

备注

对于100%的数据,0<=A,B,C,D<=15

lydrainbowcat - "Admin生日"杯NOIP模拟赛 第三题

————————————————————我是分割线————————————————————————

好题。

数学期望DP
用记忆化搜索实现。

数组竟然六维,可怕......

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include<iomanip>
 5 #include <algorithm>
 6 #include <iostream>
 7 using namespace std;
 8 double dp[15][15][15][15][5][5];
 9 bool vis[15][15][15][15][5][5];
10 int t[4];
11 double dfs(int a,int b,int c,int d,int e,int f)
12 {
13     if (vis[a][b][c][d][e][f]) return dp[a][b][c][d][e][f];
14     if (((a+(e==0)+(f==0))>=t[0])&&((b+(e==1)+(f==1))>=t[1])&&((c+(e==2)+(f==2))>=t[2])&&((d+(e==3)+(f==3))>=t[3])) return dp[a][b][c][d][e][f]=0.0;
15     int sum=a+b+c+d+(e!=4)+(f!=4);
16     double F=1;
17     if (a<13) F+=dfs(a+1,b,c,d,e,f)*(13-a)/(54-sum);
18     if (b<13) F+=dfs(a,b+1,c,d,e,f)*(13-b)/(54-sum);
19     if (c<13) F+=dfs(a,b,c+1,d,e,f)*(13-c)/(54-sum);
20     if (d<13) F+=dfs(a,b,c,d+1,e,f)*(13-d)/(54-sum);
21     double md=100; if (e==4) {for (int i=0;i<4;++i) md=min(dfs(a,b,c,d,i,f)/(54-sum),md); F+=md;}
22            md=100; if (f==4) {for (int i=0;i<4;++i) md=min(dfs(a,b,c,d,e,i)/(54-sum),md); F+=md;}
23     vis[a][b][c][d][e][f]=true;
24     return dp[a][b][c][d][e][f]=F;
25 }
26 int main()
27 {
28     memset(vis,false,sizeof vis);
29     int a,b,c,d;
30     scanf("%d%d%d%d",&t[0],&t[1],&t[2],&t[3]);
31     a=t[0];b=t[1];c=t[2];d=t[3];
32     double ans=dfs(0,0,0,0,4,4);
33     if (ans>54.0) printf("-1.000\n");
34     else cout<<setiosflags(ios::fixed)<<setprecision(3)<<ans;
35 }

tyvj 2002

转载于:https://www.cnblogs.com/SBSOI/p/5636538.html

TYVJ 2002 扑克牌 题解相关推荐

  1. tyvj 2002 扑克牌

    期望DP 本题递推比较麻烦,可以记忆化搜索 注意搜索的边界条件 以及每一次转移 #include <iostream> #include <cstdio> #include & ...

  2. Tyvj P1048 田忌赛马 题解

    像我这种蒟蒻就非常适合做一些辣鸡题,比如一些简单的贪心题,今天偶遇田忌赛马,于是我就非常轻(费)松(力)地搞定了这道题. 题目: 时间: 1000ms / 空间: 131072KiB 描述 中国古代的 ...

  3. noip2002提高组题解

    再次280滚粗.今天早上有点事情,所以做题的时候一直心不在焉,应该是三天以来状态最差的一次,所以这个分数也还算满意了.状态真的太重要了. 第一题:均分纸牌 贪心.(昨天看BYVoid的noip2001 ...

  4. 牛客题霸 [扑克牌顺子] C++题解/答案

    管理博文 牛客题霸 [扑克牌顺子] C++题解/答案 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)-他随机从中抽出了5张牌,想测测自己 ...

  5. 0x30数学知识(0x38 概率与数学期望)例题3:扑克牌(题解)

    题意 题目链接 [题意] Admin生日那天,Rainbow来找Admin玩扑克牌.玩着玩着Rainbow觉得太没意思了,于是决定给Admin一个考验. Rainbow把一副扑克牌(54张)随机洗开, ...

  6. bzoj3224 Tyvj 1728 普通平衡树题解--Treap

    题面: Description您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有 ...

  7. tyvj 2075 借教室 题解

    P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...

  8. SHOI 2002 百事世界杯之旅 题解

    题目传送门 题目大意: 有 nnn 种物品,每次随机拿一种,问期望拿几次能拿齐所有种类. 题解 跟这题一样的,甚至还要简单一些qwq,就是多了个分数. 代码如下: #include <cstdi ...

  9. AHOI 2002 黑白瓷砖 题解

    题目传送门 题目大意: 有 n(n+1)2\frac {n(n+1)} 22n(n+1)​ 个六边形瓷砖,第一层有 111 个,第二层有 222 个,以此类推组成一个三角形,给每块瓷砖染黑色或白色,两 ...

最新文章

  1. .net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1
  2. iptables使用ipt_connlimit限制连接数
  3. boost库之tcp client 回调不正常
  4. 大厂python面试题_BAT大厂Python面试题精选,看完后离拿到offer只有一步之遥(含答案)...
  5. cdr怎么转换成psd转换为位图标准_动漫角色转换真人,飞屋环游记中的小罗竟酷似他……...
  6. sql语句换行_Spark随笔|关于Bucket Table与SQL语句转换
  7. 说说基于网络的五种IO模型
  8. c语言结构体实现存储信息,用C语言结构体实现通讯录
  9. Qt的QThread多线程使用
  10. StringUtil.isEmpty()和StringUtil.isBlank()的区别
  11. 自定义bt服务器,[教程]Aria2自动更新BT Tracker服务器列表的方法
  12. 4r照片尺寸是多大_4r照片尺寸(正常照片是5寸还是6寸)
  13. 小区物业专属公众号管理办法
  14. 保研之路——哈深计算机预推免
  15. 苹果iWork,看上去很美
  16. 建筑计算机综合应用能力实训,计算机综合应用能力实训.doc
  17. NiFi 的使用心得
  18. matlab怎么加采样开关,开关量采集模块怎么使用?
  19. ZYNQ RFSoc开发板-usrp软件无线电X410mini开发板-5G评估板
  20. 在OpenCV里实现二维离散卷积1

热门文章

  1. 人脸识别躲不过一张3D面具,安全风险到底有多大?
  2. Tensorflow的基本运行方式--demo程序
  3. 讲个笑话,李彦宏可能会被选为两院院士
  4. 关于数据集 使用PutCollect后m_Recordset-Update();数据集更新报错的问题
  5. php过滤手机特殊字符,php过滤特殊字符实用函数
  6. gis属性表怎么导成excel_第022篇:ArcGIS中将属性表直接导出为Excel的方法
  7. 03_属性别名映射的配置
  8. 为什么java可跨平台执行,java为什么可以跨平台执行
  9. lda 可以处理中文_LDA数学八卦索引及全文文档
  10. mysql 分组占比_含泪整理MySQL索引