leetcode *808. 分汤(2022.11.21)
admin
2024-04-10 18:13:35
0

【题目】*808. 分汤

有 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。返回值在正确答案 10−510^{-5}10−5 的范围内将被认为是正确的。

示例 1:

输入: n = 50
输出: 0.62500
解释:如果我们选择前两个操作,A 首先将变为空。
对于第三个操作,A 和 B 会同时变为空。
对于第四个操作,B 首先将变为空。
所以 A 变为空的总概率加上 A 和 B 同时变为空的概率的一半是 0.25 *(1 + 1 + 0.5 + 0)= 0.625。

示例 2:

输入: n = 100
输出: 0.71875

提示:
0 <= n <= 109​​​​​​​

【解题思路1】动态规划

首先,由于四种分配操作都是 25 的倍数,因此我们可以将 n 除以 25(如果有余数,则补 1),并将四种分配操作变为 (4,0),(3,1),(2,2),(1,3),且每种操作的概率均为 0.25。

当 n 较小时,我们可以用动态规划来解决这个问题。设 dp(i,j) 表示汤 A 和汤 B 分别剩下 i 和 j 份时所求的概率值,即汤 A 先分配完的概率 + 汤 A 和汤 B 同时分配完的概率除以 2 。 状态转移方程为:

dp(i,j)=1/4×( dp(i−4,y)+dp(i−3,y−1)+dp(i−2,y−2)+dp(i−1,y−3) )

我们仔细考虑一下边界条件:

当满足 i>0,j=0,此时无法再分配,而汤 A 还未分配完成,汤 A 永远无法完成分配,此时 dp(i,j)=0;

当满足 i=0,j=0,此时汤 A 和汤 B 同时分配完的概率为 1.0,汤 A 先分配完的概率为 0,因此 dp(i,j)=1.0×0.5=0.5;

当满足 i=0,j>0,此时无法再分配,汤 A 先分配完的概率为 1.0,汤 B 永远无法完成分配,因此 dp(i,j)=1.0;

因此综上,我们可以得到边界条件如下:

dp(i,j)={0,i>0, j=00.5,i=0, j=01,i=0, j>0​dp(i,j)= \begin{cases} 0, & \text{i>0, j=0}\\ 0.5, & \text{i=0, j=0}\\ 1, & \text{i=0, j>0} \end{cases} ​dp(i,j)=⎩⎪⎨⎪⎧​0,0.5,1,​i>0, j=0i=0, j=0i=0, j>0​​

我们可以看到这个动态规划的时间复杂度是 O(n2),即使将 n 除以 25 之后,仍然没法在短时间内得到答案,因此我们需要尝试一些别的思路。 我们可以发现,每次分配操作有 (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−510^{−5}10−5
。实际我们在进行测算时发现:

n=4475,p≈0.999990211307
n=4476,p≈0.999990468596
因此在 n≥179×25n 时,我们只需要输出 1 作为答案即可。在其它的情况下,我们使用动态规划计算出答案。

class Solution {public double soupServings(int n) {n = (int) Math.ceil((double) n / 25);if (n >= 179) {return 1.0;}double[][] dp = new double[n + 1][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[Math.max(0, i - 4)][j] + dp[Math.max(0, i - 3)][Math.max(0, j - 1)] + dp[Math.max(0, i - 2)][Math.max(0, j - 2)] + dp[Math.max(0, i - 1)][Math.max(0, j - 3)]) / 4.0;}}return dp[n][n];}
}

【解题思路2】DFS

class Solution {private double[][] memo;public double soupServings(int n) {n = (int) Math.ceil((double) n / 25);if (n >= 179) {return 1.0;}memo = new double[n + 1][n + 1];return dfs(n, n);}public 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) {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];}
}

相关内容

热门资讯

德扑之星辅助器购买!德扑之星操... 德扑之星辅助器购买!德扑之星操作(透明挂)其实真的有挂(有挂插件)是一款可以让一直输的玩家,快速成为...
姓叶女孩起什么名字好? 姓叶女孩起什么名字好?我妹妹是虎年的,希望可以给她起个好名字。 要好听又有内涵点的。叶玉琪 叶婉...
德扑之星猫腻!德扑计算软件(辅... 德扑之星猫腻!德扑计算软件(辅助)其实真的有挂(有挂总结)德扑之星猫腻辅助器中分为三种模型:德扑之星...
aapoker有猫腻!aapo... aapoker有猫腻!aapoker有外挂吗(透明挂)其实真的有挂(有挂安装);1分钟了解详细教程(...
微扑克德州专用辅助器!微扑克模... 微扑克德州专用辅助器!微扑克模拟器是什么(辅助)其实真的有挂(有挂软件)1、下载好微扑克德州专用辅助...
太空飞船怎么画 太空飞船怎么画太空飞船的画法:1、首先画出半个椭圆,在上面画出飞船的船头,往下画出飞船的发射装置。画...
aapoker外挂!aapok... aapoker外挂!aapoker有猫腻吗(透视)原来真的有挂(有挂插件)1、在aapoker有猫腻...
WePoKe透视挂!wepok... WePoKe透视挂!wepoke辅助挂(透视)其实真的有挂(有挂助手)一、WePoKe透视挂软件透明...
aapoker有挂!aapok... aapoker有挂!aapoker用外挂会被封号吗(透视)其实真的有挂(有挂技巧)是一款可以让一直输...
求女主爱上了自己姐姐男朋友的小... 求女主爱上了自己姐姐男朋友的小说,最好短一点······《然后,爱情随遇而安》 《明冬仍有雪》
微扑克游戏辅助器!微扑克职业代... 微扑克游戏辅助器!微扑克职业代打(辅助)其实真的有挂(有挂安装)1、每一步都需要思考,不同水平的挑战...
wpk辅助挂!wpk透视辅助可... wpk辅助挂!wpk透视辅助可测试真的(辅助)其实真的有挂(有挂教程)1、实时wpk透视辅助开挂更新...
有谁认识余世维?谁知道还有哪些... 有谁认识余世维?谁知道还有哪些大师的讲座也讲的很好?谢谢!余世维说的事情都是真是的么?包括她名下有7...
德扑之星有作弊!德扑之星开桌怎... 德扑之星有作弊!德扑之星开桌怎么设置(透明挂)原来真的有挂(有挂插件)1、德扑之星有作弊系统规律教程...
微扑克ai辅助工具!微扑克软件... 微扑克ai辅助工具!微扑克软件开发(透明挂)其实真的有挂(有挂工具)1、点击下载安装,微扑克wpk插...
第三者的下场会怎样? 第三者的下场会怎样?如果他们的爱情是坚固的,别人也就不会能介入到其中了。第三者,说起来似乎很让人难以...
微扑克德州专用辅助器!微扑克有... 微扑克德州专用辅助器!微扑克有脚本吗(透视)原来真的有挂(有挂攻略)是一款可以让一直输的玩家,快速成...
主题特色餐厅:舌尖上解锁创意之... 在现代城市的喧嚣中,人们对餐饮的需求已经超越了简单的食欲。主题餐厅的兴起是这种需求变化的生动体现。它...
WPK透视辅助!wpk发牌规律... WPK透视辅助!wpk发牌规律(透视)原来真的有挂(有挂教学)是一款可以让一直输的玩家,快速成为一个...
wpk外挂!wpk的发牌机制(... wpk外挂!wpk的发牌机制(透明挂)其实真的有挂(有挂教程)1、wpk外挂系统规律教程、wpk外挂...