LeetCode 808. 分汤(动态规划)

文章目录

    • 1. 题目
    • 2. 解题

1. 题目

有 A 和 B 两种类型的汤。一开始每种类型的汤有 N 毫升。有四种分配操作:

  • 提供 100ml 的汤A 和 0ml 的汤B。
  • 提供 75ml 的汤A 和 25ml 的汤B。
  • 提供 50ml 的汤A 和 50ml 的汤B。
  • 提供 25ml 的汤A 和 75ml 的汤B。

当我们把汤分配给某人之后,汤就没有了。
每个回合,我们将从四种概率同为0.25的操作中进行分配选择。
如果汤的剩余量不足以完成某次操作,我们将尽可能分配。
当两种类型的汤都分配完时,停止操作。

注意不存在先分配100 ml汤B的操作。

需要返回的值: 汤A先分配完的概率 + 汤A和汤B同时分配完的概率 / 2。

示例:
输入: N = 50
输出: 0.625
解释:
如果我们选择前两个操作,A将首先变为空。
对于第三个操作,A和B会同时变为空。
对于第四个操作,B将首先变为空。
所以A变为空的总概率加上A和B同时变为空的概率的一半是 
0.25 *(1 + 1 + 0.5 + 0)= 0.625。注释:
0 <= N <= 10^9。
返回值在 10^-6 的范围将被认为是正确的。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/soup-servings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 动态规划,见注释
  • 由于N特别大,采用map存储状态,且考虑到A肯定大概率先喝完,计算出 N >= 4800 时,概率误差小于 1e-6
class Solution {
public:double soupServings(int N) {unordered_map<int,unordered_map<int,double>> dp, temp;if(N >= 4800) return 1;//经过计算 N=4800时,prob = 0.99999,误差小于1e-6dp[N][N] = 1.0;double prob = 0.0, p;vector<vector<int>> delta = {{100,0},{75,25},{50,50},{25,75}};int A, B, nA, nB, i;while(!dp.empty()){for(auto& item1 : dp){	A = item1.first;for(auto& item2 : item1.second){B = item2.first;p = item2.second;if(A == 0)//A喝完了{if(B == 0)//AB同时喝完prob += p/2.0;else if(B > 0)//A先喝完prob += p;}else//A没完{if(B == 0)//B先喝完,不在答案考虑范围内continue;for(i = 0; i < 4; i++)//4种情况{nA = max(0, A-delta[i][0]);//不够,直接全部喝完,为0nB = max(0, B-delta[i][1]);temp[nA][nB] += p*0.25;}}}}dp.swap(temp);//更新dptemp.clear();}return prob;}
};

8 ms 7.6 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
Michael阿明

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

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

相关文章

JavaScript入门介绍 1 2021/02/27

一、JavaScript简介一 1.1 javascript 简介 JavaScript是Web页面中的一种脚本编程语言&#xff0c;可用于Web系统的客户端和服务器端编程前身叫做LiveScript&#xff0c;是Netscape公司开发的脚本语言。在Sun公司推出Java语言后&#xff0c; Netscape公司和Sun公司于1995年一…

css权重值

CSS权重指的是样式的优先级&#xff0c;有两条或多条样式作用于一个元素&#xff0c;权重高的那条样式对元素起作用,权重相同的&#xff0c;后写的样式会覆盖前面写的样式。 权重的等级 可以把样式的应用方式分为几个等级&#xff0c;按照等级来计算权重 !important&#xf…

LeetCode 848. 字母移位(前缀和+取模)

文章目录1. 题目2. 解题1. 题目 有一个由小写字母组成的字符串 S&#xff0c;和一个整数数组 shifts。 我们将字母表中的下一个字母称为原字母的 移位&#xff08;由于字母表是环绕的&#xff0c; ‘z’ 将会变成 ‘a’&#xff09;。 例如&#xff0c;shift(a) b&#xff…

jsp:setProperty

类声明&#xff1a; package test; public class Student { private int age; public int getAge() { return age; } public void setAge(int age) { this.age age; } } jsp代码&#xff1a; <jsp:useBean id"student"…

第一章、OS引论1

1.1 操作系统的目标和作用 1.1.1 操作系统的目标 计算机上安装操作系统&#xff0c;主要目标是&#xff1a;方便性、有效性、可扩充性和开放性。 方便性&#xff1a;方便用户&#xff0c;使计算机变得易学易用有效性&#xff1a;提高系统资源(资源指CPU(处理机),存储器,文件(…

常用图片格式介绍(了解

常用图片格式 图片是网页制作中很重要的素材&#xff0c;图片有不同的格式&#xff0c;每种格式都有自己的特性&#xff0c;了解这些特效&#xff0c;可以方便我们在制作网页时选取适合的图片格式&#xff0c;图片格式及特性如下&#xff1a; 1、psd photoshop的专用格式。 优点…

LeetCode 858. 镜面反射(最小公倍数/最大公约数)

文章目录1. 题目2. 解题1. 题目 有一个特殊的正方形房间&#xff0c;每面墙上都有一面镜子。 除西南角以外&#xff0c;每个角落都放有一个接受器&#xff0c;编号为 0&#xff0c; 1&#xff0c;以及 2。 正方形房间的墙壁长度为 p&#xff0c;一束激光从西南角射出&#xf…

SharePoint 2013的100个新功能之搜索(一)

一&#xff1a;新的搜索架构 SharePoint 2013中将最好的两个搜索引擎“SharePoint搜索”和“SharePoint FAST搜索服务”整合到了一个搜索引擎&#xff0c;提供更大的冗余和更好的扩展性。更多信息 二:持续的爬网 一个新的爬网选项“持续爬网”被引入到了搜索的爬网计划表中&…

Ubuntu从零安装 Hadoop And Spark

安装 linux 以Ubuntu为例 选择镜像&#xff0c;虚拟机安装 虚拟机下&#xff0c;直接安装镜像即可&#xff0c;选择好自己的配置&#xff0c;一定要注意路径名选好&#xff0c;而且和你虚拟机的名称匹配&#xff0c;这里我的镜像是 ubuntu-20.04.2.0-desktop-amd64.iso 切换…

04.卷积神经网络 W2.深度卷积网络:实例探究

文章目录1. 为什么要进行实例探究2. 经典网络3. 残差网络 ResNets4. 残差网络为什么有用5. 网络中的网络 以及 11 卷积6. 谷歌 Inception 网络简介7. Inception 网络8. 使用开源的实现方案9. 迁移学习10. 数据增强 Data augmentation11. 计算机视觉现状作业参考&#xff1a; 吴…

transition动画与transform变换(了解

1、transition-property 设置过渡的属性&#xff0c;比如&#xff1a;width height background-color2、transition-duration 设置过渡的时间&#xff0c;比如&#xff1a;1s 500ms3、transition-timing-function 设置过渡的运动方式&#xff0c;常用有 linear(匀速)|ease(缓冲…

mysql游标循环的使用

CREATE PROCEDURE test.new_procedure () BEGIN -- 需要定义接收游标数据的变量 DECLARE a CHAR(16);-- 游标DECLARE cur CURSOR FOR SELECT i FROM test.t;-- 遍历数据结束标志DECLARE done INT DEFAULT FALSE;-- 将结束标志绑定到游标DECLARE CONTINUE HANDLER FOR NOT FOUND…

动态规划之最长上升子序列模型

动态规划分为很多模型&#xff0c;比如说数字三角形模型&#xff0c;最长上升子序列模型&#xff0c;背包模型&#xff0c;状态机模型&#xff0c;状态压缩&#xff0c;区间dp&#xff0c;树形dp等等 下面&#xff0c;我就Acwing提高课中&#xff0c;最长上升子序列模型进行了整…

LeetCode 900. RLE 迭代器(模拟/二分查找)

文章目录1. 题目2. 解题2.1 直接模拟2.2 二分查找1. 题目 编写一个遍历游程编码序列的迭代器。 迭代器由 RLEIterator(int[] A) 初始化&#xff0c;其中 A 是某个序列的游程编码。 更具体地&#xff0c;对于所有偶数 i&#xff0c;A[i] 告诉我们在序列中重复非负整数值 A[i …

html-css练习题(系统提示)

代码赏析&#xff1a;<!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible&qu…

notification

A页面 //向列表页面B发送一个通知 postShopZanCountData NSMutableDictionary *dic[[NSMutableDictionaryalloc] init]; [[NSNotificationCenterdefaultCenter] postNotificationName:"postData"object:niluserInfo:dic]; B 页面 [[NSNotificationCenterdefaultCente…

机器学习算法--线性回归分析(单元和多元)

关键词 分类模型、回归模型 存在序的离散属性、不存在序的离散属性 有监督的机器学习 回归的分类&#xff08;输入变量数目&#xff0c;输入变量和输出变量的关系&#xff09; 已知数据集&#xff0c;未知参数 均方误差最小化&#xff0c;最小二乘法 一元线性回归 多元线…

LeetCode 740. 删除与获得点数(排序+动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除每个等于 nums[i] - 1 或 nums[i] 1 的元素。 开始你拥有…

多线程编程-条件变量

转载自&#xff1a;http://blog.chinaunix.net/uid-21411227-id-1826890.html 1&#xff0e;引言&#xff1a; 条件变量是一种同步机制&#xff0c;允许线程挂起&#xff0c;直到共享数据上的某些条件得到满足。条件变量上的基本操作有&#xff1a;触发条件(当条件变为 true 时…

html-css练习题 (注册表单)

代码赏析&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <meta http-equiv"X-UA-Co…