218. 扑克牌 - 记忆化概率dp

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
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'using namespace std;typedef pair<int, int> PII;
typedef long long ll;const int N = 15, INF = 1e20;int A, B, C, D;
double f[N][N][N][N][5][5];double dp(int a, int b, int c, int d, int x, int y)
{//if(a > 13 || b > 13 || c > 13 || d > 13)return INF;double &v = f[a][b][c][d][x][y];if(v >= 0)return v;int as = a + (x == 0) + (y == 0);int bs = b + (x == 1) + (y == 1);int cs = c + (x == 2) + (y == 2);int ds = d + (x == 3) + (y == 3);if(as >= A && bs >= B && cs >= C && ds >= D)return v = 0;int sum = a + b + c + d + (x != 4) + (y != 4);sum = 54 - sum;if(sum == 0)return v = INF;v = 1;if(a < 13)v += (13.0 - a) / sum * dp(a + 1, b, c, d, x, y);if(b < 13)v += (13.0 - b) / sum * dp(a, b + 1, c, d, x, y);if(c < 13)v += (13.0 - c) / sum * dp(a, b, c + 1, d, x, y);if(d < 13)v += (13.0 - d) / sum * dp(a, b, c, d + 1, x, y);if(x == 4){double t = INF;for(int i = 0; i < 4; i ++){t = min(t, 1.0 / sum * dp(a, b, c, d, i, y));}v += t;}if(y == 4){double t = INF;for(int i = 0; i < 4; i ++){t = min(t, 1.0 / sum * dp(a, b, c, d, x, i));}v += t;}return v;
}int main()
{//IOScin >> A >> B >> C >> D;memset(f, -1, sizeof f);double t = dp(0, 0, 0, 0, 4, 4);if(t > INF / 2)t = -1;printf("%.3lf", t);return 0;
}

 思路和绿豆蛙那题有点像,一个点的期望等于所有  下一个点的期望乘以相应概率  之和,和图沾点边。

f[a][b][c][d][x][y]

a、b、c、d分别表示每个花色对应的数量,x表示大王,0~3对应所在花色,4表示在牌堆里

小王同理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79217.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

留资机器人助你有效提高营销成功率

我们都知道&#xff0c;当客户产生留资行为&#xff0c;就要抓住机会&#xff0c;让工作人员及时地对客户进行回访&#xff0c;然后将留资线索跟踪、维系。而如何准确有效地提高客户保留率和转化率是营销成功的关键。所以对于企业来说&#xff0c;留资机器人正是引导客户留资&a…

Nebula Graph图数据库教程介绍

Nebula Graph图数据库教程介绍 ​ Nebula Graph&#xff08;星云图&#xff09;是一个开源的分布式图数据库系统&#xff0c;最初由中国的石墨烯数据库团队开发。它专门设计用于处理大规模图数据&#xff0c;并提供了高度可扩展性和性能。Nebula Graph支持多种图数据库的核心特…

Android笔记(二十九):利用python自动生成多语言

背景 项目需要支持十几种多语言&#xff0c;而且每个版本的新功能ui都有很多地方需要多语言&#xff0c;如果手动添加非常耗时&#xff0c;于是设计了一个python脚本&#xff0c;通过excel表格转化多语言到项目values/strings文件内 步骤 android工程项目结构 脚本位于langu…

Android官方推荐 无需向应用授予的照片选择器工具

官网链接 Photo picker | Android Developers 不能跳转链接看这 Photo picker 照片选择器对话框会显示在您的设备上的媒体文件中。选择一张照片与应用程序分享。 图1. 照片选择器提供了一个直观的用户界面&#xff0c;用于与您的应用程序分享照片。 照片选择器提供了一个可…

Excel数学、工程和科学计算插件:FORMULADESK Studio

如果 Excel 是您的武器 - 让我们磨砺您的剑&#xff01;为整天使用 Excel 的人们提供创新的 Excel 加载项&#xff0c;你需要这个 FORMULADESK Studio。。。 Excel 插件为任何使用 Excel 执行数学、工程和科学计算的人提供了必备工具。 * 将公式视为真正的数学方程 * 为您的公…

供应商整合对企业有哪些好处?

企业采购总是希望降低成本&#xff0c;赢得更多的利润。实现这目标的其中一种方法就是供应商整合。 究竟什么是供应商整合&#xff1f;整合供应商有哪些好处&#xff1f;本文为你详细解答。 什么是供应商整合&#xff1f; 供应商整合是减少特定产品或服务的供应商数量的过程。…

[当人工智能遇上安全] 9.基于API序列和深度学习的恶意家族分类实例详解

您或许知道&#xff0c;作者后续分享网络安全的文章会越来越少。但如果您想学习人工智能和安全结合的应用&#xff0c;您就有福利了&#xff0c;作者将重新打造一个《当人工智能遇上安全》系列博客&#xff0c;详细介绍人工智能与安全相关的论文、实践&#xff0c;并分享各种案…

混合项目管理:如何成功地整合传统与敏捷方法?

若你尚未涉足于混合项目管理这一领域&#xff0c;且暗自以为其难以捉摸、令人费解&#xff0c;我们向你承诺&#xff0c;实则并非如此。 在深入探究混合项目管理这一主题之前&#xff0c;我们先澄清几项基础但关键的专业术语。在当今这个商业竞争愈发激烈的环境中&#xff0c;项…

如何将一个字符串转换为驼峰命名法(camel case)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

面试算法3:前n个数字二进制形式中1的个数

题目 输入一个非负数n&#xff0c;请计算0到n之间每个数字的二进制形式中1的个数&#xff0c;并输出一个数组。例如&#xff0c;输入的n为4&#xff0c;由于0、1、2、3、4的二进制形式中1的个数分别为0、1、1、2、1&#xff0c;因此输出数组[0&#xff0c;1&#xff0c;1&…

Linux运维基础知识大全

一. Linux组成 1. 内核 内核&#xff1a;系统空间的代码和数据的集合称为内核&#xff08;Kernel&#xff09;&#xff1b;kernel是操作系统内部最核心的软件&#xff0c;和硬件打交道的 1.对cpu进行管理&#xff0c;进程调度到cpu里进行管理 2.对内存进行空间的分配&#xff0…

nginx 配置反向代理

一、首先进入/usr/local/nginx/conf中&#xff0c;修改nginx.conf文件 二、配置信息 在server{}中 location ^~/api {proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_http_version 1.1;proxy_set_header Host $host;proxy_se…

算法通关村-----系列文章整理

第一关 原来链表这么有用 链表青铜关卡 链表增删改查 链表白银关卡 两个链表第一个公共子节点问题 判断链表是否为回文序列 合并有序链表 链表经典问题之双指针 链表黄金关卡 待更新。。。 第二关 两天写了三次的链表反转 链表反转青铜挑战 三种方式实现手写链表反…

递归学习——记忆化搜索

目录 ​编辑 一&#xff0c;概念和效果 二&#xff0c;题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…

私域流量的优势与变现方式

私域流量是指通过建立自己的粉丝群体&#xff0c;实现粉丝运营和内容输出&#xff0c;从而获得更高价值的流量资源。那么&#xff0c;相较于传统营销模式私域流量究竟有哪些优势&#xff1f;如何通过私域流量实现变现呢&#xff1f;本文将为你一一解答。 私域流量的优势在于&a…

使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅

大家好&#xff01;今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群。 MinIO 对象存储是什么&#xff1f; 对象是二进制数据&#xff0c;例如图像、音频文件、电子表格甚至二进制可执行代码。对象的大小可以从几 B 到几 TB 不等。像 MinIO 这样的对象存储…

解决 Axios 跨域问题,轻松实现接口调用

跨域是指访问另外一个域的资源&#xff0c;由于浏览器的同源策略&#xff0c;默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略&#xff0c;这是由浏览器对 JavaScript 施加的安全限制。 Axios 跨域常见报错 跨域请求被阻止 (…

vue中 字体图标引入 - iconfont阿里字体图标库

官网&#xff1a;iconfont-阿里巴巴矢量图标库 代码应用中&#xff0c;有许多方法&#xff0c;如何使用该图标库。如&#xff0c;icon单个使用、unicode引用、或 font-class引用&#xff08;推&#xff09;、symbol&#xff08;svg合集&#xff09;。本文主讲 font-class 方法…

Git(9)——Git多人协同开发之创建初始项目

目录 一、简介 二、创建新项目 三、本地Git接入 四、创建远端仓库——Gitee 五、推送代码至远端仓库 一、简介 前面8章都是我们一个人独自开发&#xff0c;如果现在项目新增两名同事&#xff0c;我们就需要使用Git来实现多人协同开发&#xff0c;从第九章开始将介绍从零到…

Jenkins教程—构建多分支流水线项目

本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目&#xff0c; 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前&#xff0c;建议你前往 教程概览 页面&#xff0c;并至少完成一个 介绍教程&#xff0c; 从而…