Leetcode808. 分汤

news2024/10/7 16:24:55

文章目录

  • 题目链接
  • 题目大意
  • 解题思路
  • 代码(C++)
    • 动态规划
    • 记忆化搜索


题目链接

点我(^_^)


题目大意

注意不是两个概率加和除以2


解题思路

考虑动态规划,因为汤的分配都是以 25 的倍数进行分配的,所以这里把 25 ml 的汤看作一份, 总 的 份 数 = ⌈ 汤 的 体 积 / 25 ⌉ 总的份数 = \left \lceil 汤的体积/25 \right \rceil =/25,比如 101 ml 的汤可以看作 5 份。

d p [ i ] [ j ] dp[i][j] dp[i][j] 表示在 A 类型汤剩余 i i i 份,B 类型汤剩余 j j j 时,汤A 先分配完的概率 + 汤A和汤B 同时分配完的概率 / 2。那么其递推公式如下,就是分别执行四种分配操作。

d p [ i ] [ j ] = d p [ i − 4 ] [ j ] + d p [ i − 3 ] [ j − 1 ] + d p [ i − 2 ] [ j − 2 ] + d p [ i − 1 ] [ j − 3 ] 4 dp[i][j]=\frac{dp[i-4][j]+dp[i-3][j-1]+dp[i-2][j-2]+dp[i-1][j-3]}{4} dp[i][j]=4dp[i4][j]+dp[i3][j1]+dp[i2][j2]+dp[i1][j3]

下面考虑起始状态:

  • d p [ 0 ] [ 0 ] = 0.5 dp[0][0]=0.5 dp[0][0]=0.5 此时 汤A和汤B 同时分配完的概率为 1,除以 2 之后就是 0.5。
  • d p [ i ] [ 0 ] = 0 dp[i][0]=0 dp[i][0]=0 此时 汤B 先被分配完的概率为 1,那么其他情况概率就是 0。
  • d p [ 0 ] [ j ] = 0 dp[0][j]=0 dp[0][j]=0 此时 汤A 先被分配完的概率为 1。

此时时间复杂度为 O(n2/125),肯定是不行的, 我们可以发现,每次分配操作有 (4,0),(3,1),(2,2),(1,3) 四种,那么在一次分配中,汤 A 平均会被分配的份数期望为 E(A)=(4+3+2+1)×0.25=2.5,汤 B 平均会被分配的份数期望为 E(B)=(0+1+2+3)×0.25=1.5。因此在 n 非常大的时候,汤 A 会有很大的概率比 B 先分配完,汤 A 被先取完的概率应该非常接近 1。事实上,当我们进行实际计算时发现,当 n≥4475 时,所求概率已经大于0.99999了(可以通过上面的动态规划方法求出),它和 1 的误差(无论是绝对误差还是相对误差)都小于 10−5

实际我们在进行测算时发现:

因此在 n ≥ 179 × 25 n \ge 179 \times 25 n179×25 时,我们只需要输出 1 作为答案即可。在其它的情况下,我们使用动态规划计算出答案。

当然,也可以使用记忆化搜索,这时可以省去计算某些不必要的状态。


代码(C++)

动态规划

class Solution {
public:
    double soupServings(int n) {
        n = ceil((double) n / 25);
        if (n >= 179) {
            return 1.0;
        }
        vector<vector<double>> dp(n + 1, vector<double>(n + 1));
        dp[0][0] = 0.5;
        for (int i = 1; i <= n; i++) {
            dp[0][i] = 1.0;
        }
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = (dp[max(0, i - 4)][j] + dp[max(0, i - 3)][max(0, j - 1)] +
                           dp[max(0, i - 2)][max(0, j - 2)] + dp[max(0, i - 1)][max(0, j - 3)]) / 4.0;
            }
        }
        return dp[n][n];
    }
};

记忆化搜索

class Solution {
public:
    double soupServings(int n) {
        n = ceil((double) n / 25);
        if (n >= 179) {
            return 1.0;
        }
        memo = vector<vector<double>>(n + 1, vector<double>(n + 1));
        return dfs(n, n);
    }

    double dfs(int a, int b) {
        if (a <= 0 && b <= 0) {
            return 0.5;
        } else if (a <= 0) {
            return 1;
        } else if (b <= 0) {
            return 0;
        }
        if (memo[a][b] > 0) {
            return memo[a][b];
        }
        memo[a][b] = 0.25 * (dfs(a - 4, b) + dfs(a - 3, b - 1) + 
                             dfs(a - 2, b - 2) + dfs(a - 1, b - 3));
        return memo[a][b];
    }
private:
    vector<vector<double>> memo;
};

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

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

相关文章

A-Level经济例题解析及练习Analysis of Tax

今日知识点&#xff1a;Analysis of Tax 例题A. Compute consumer surplus, producer surplus, and total surplus without a tax. B. If $100 tax per ticket, compute consumer surplus, producer surplus, tax revenue, total surplus, and deadweight loss.解析下面我们为大…

搭载北京君正X2000主控芯片的成功案例

汉王e典笔S20 Plus搭载北京君正研发的X2000多核异构跨界处理器。X2000多核异构跨界处理器主要面向于智能音频、图像识别、智能家电、智能家居、智能办公等五大领域。CPU采取三核结构&#xff0c;搭载双XBurst2&#xff0c;主频1.2GHz&#xff0c;跨界第三核XBurst0(240MHz)&…

Linux--进程概念

前言&#xff1a; 在学习操作系统的过程中&#xff0c;我们常常能听到进程这一概念以及相关的一些知识。例如什么是父进程&#xff0c;什么是子进程&#xff0c;如何创建子进程&#xff0c;如何杀死进程等。这些知识后面会一一介绍&#xff0c;在迈入学习进程的第一步我只需要知…

[附源码]java毕业设计校园二手交易平台的设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

养殖废水总氮超标的解决方法

养殖废水除总氮。入水是100mg/L&#xff0c;处理水量大概在3T/H&#xff0c;要求养殖废水总氮小于5PPM。 生化前置过滤树脂的工艺&#xff0c;通过阳树脂中含有的阳离子会与水中的游离氨&#xff08;NH3&#xff09;和铵离子&#xff08;NH4&#xff09;进行交换&#xff0c;将…

2.15 这样的小红书图片内容,最容易“踩雷”!【玩赚小红书】

1、笔记中所有图片只展示一件单品 这类内容有可能会被系统判定为广告&#xff0c;或被用户怀疑为软广而举报。据介绍&#xff0c;小红书平台上的用户对软广的接受度较低&#xff0c;这类内容时常因为被举报而限流。 小红书引入“生态官”维护社区内容后&#xff0c;生态官也会…

三层vlan实验

目录 实验拓扑 实验需求 实验解法 5&#xff0c;按照图示配置 IP 地址&#xff0c;其中只有SW1需要配置三层vlan地址&#xff0c;电脑设备为DHCP获取地址 6&#xff0c;在sw1配置DHCP动态地址池塘&#xff0c;DNS为114.114.114.114 7&#xff0c;各台电脑通过交换机划分不…

你的系统如何支撑高并发?大佬手写高并发架构设计笔记帮你圆满回答!

开篇&#xff0c;我们聊聊大量同学问我的一个问题&#xff0c;面试的时候被问到一个让人特别手足无措的问题&#xff1a;你的系统如何支撑高并发&#xff1f; 大多数同学被问到这个问题压根儿没什么思路去回答&#xff0c;不知道从什么地方说起&#xff0c;其实本质就是没经历…

m虚拟MIMO系统的配对调度算法的matlab仿真,对比Random配对,Orthogonal配对以及Deteminant配对

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 利用多输入多输出&#xff08;MIMO&#xff0c;Multiple InputMultiple Output&#xff09;技术通过空间复用能够显著的提高通信系统的容量&#xff0c;并可以很好的缓解时/频资源日益紧…

BCN衍生物:endo-BCN-PEG4-TAMRA/Palmitic/DSPE

凯新生物公司小编分享&#xff1a;endo-BCN-PEG4-TAMRA &#xff0c;endo-BCN-PEG4-Palmitic&#xff0c;endo-BCN-PEG4-DSPE这几种的物理相关数据。 1、endo-BCN-PEG4-TAMRA 四甲基罗丹明&#xff08;TAMRA&#xff09;-叠氮化物是一种化学探针&#xff0c;用于直接在活细胞中…

食品连锁企业怎样结合快解析打造智能安全管理系统

食品质量安全是食品类企业的生命线&#xff0c;对产品质量的安全管控必须十分严苛。A企业是全国知名的一家大型食品连锁企业&#xff0c;为了做好质量监控&#xff0c;A企业研发了一套智能安全管理预警系统&#xff0c;可以从多维度对生产一线的违规事件进行预警记录&#xff0…

MCE | 细胞实验——多溶剂集合

■ 不到不得已&#xff0c;谁也不想现用现配细胞实验的工作浓度通常在 μM 级别&#xff0c;有的还是 nM 和 pM&#xff0c;要做到现用现配&#xff0c;难度系数有点高&#xff0c;好比让一个日均不到 1000 步的人去爬 5000 米的山峰&#xff0c;这难度&#xff0c;你细品&…

Bot代码的执行(微服务)

负责接收一段代码&#xff0c;把代码扔到我们的队列当中、每一次我们去运行一段代码 运行结束之后、把我们的结果返回给我们的服务器 先把依赖复制过来、我们需要动态的把用户传过来的Java代码编译然后执行 需要加入依赖joor-java-8、用Java的代码的写法举例子 未来自己实现的时…

阿里云无影研发负责人任晋奎:端云技术创新,打造全新用户体验

11 月 4 日&#xff0c;阿里云无影研发负责人任晋奎在 2022 云栖大会“无影技术创新与应用实践”论坛上&#xff0c;发表了题为《端云技术创新&#xff0c;打造全新用户体验》的演讲&#xff0c;对无影端云开放架构的技术能力做了深入浅出的分享&#xff0c;解读了无影如何以技…

实现制作动漫版的你---动漫风格迁移网络AnimeGANv2

AI依然火 最近居家太无聊了&#xff0c;无意见逛到了AI社区&#xff0c;发现最近AI算法热度还是很高&#xff0c;什么AI绘画&#xff0c;还有什么AI作诗&#xff0c;写歌。可以说&#xff0c;人工智能领域在一步步挑战人类的高度&#xff0c;从循规蹈矩的简单工作&#xff0c;…

【笔试强训】Day1

&#x1f308;欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x…

阿里云云数据库Redis的核心概念以及正确购买姿势(十五)

文章目录1.云数据库Redis基本介绍1.1.什么是云数据库Redis1.2.Redis标准版单副本架构1.3.Redis标准版双副本架构1.4.Redis集群版单副本架构1.5.Redis集群双副本架构1.6.Redis集群的直连架构1.7.Redis集群读写分离架构2.购买云数据库Redis2.1.创建Redis实例2.2.配置商品类型及可…

WPF 控件专题 TreeView控件详解

1、TreeView介绍 命名空间&#xff1a;System.Windows.Controls TreeView 表示一个控件&#xff0c;该控件在树结构&#xff08;其中的项可以展开和折叠&#xff09;中显示分层数据。 TreeView 是一个 ItemsControl&#xff0c;这意味着它可以包含任何类型的对象的集合 (&a…

进程的通信 - WM_COPYDATA

在Windows程序中&#xff0c;各个进程之间常常需要交换数据&#xff0c;进行数据通讯。其中使用SendMessage向另一进程发送WM_COPYDATA消息是一种比较经济实惠的方法。 WM_COPYDATA通信需要将传递的消息封装在COPYDATASTRUCT结构体中&#xff0c;在SendMessage消息传递函数时作…

[附源码]java毕业设计校园超市进销存管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…