Leetcode:799. 香槟塔
我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟。
从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)
例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟,如下图所示。
现在当倾倒了非负整数杯香槟后,返回第 i 行 j 个玻璃杯所盛放的香槟占玻璃杯容积的比例(i 和 j都从0开始)。
示例 1: 输入: poured(倾倒香槟总杯数) = 1, query_glass(杯子的位置数) = 1, query_row(行数) = 1 输出: 0.0 解释: 我们在顶层(下标是(0,0))倒了一杯香槟后,没有溢出,因此所有在顶层以下的玻璃杯都是空的。示例 2: 输入: poured(倾倒香槟总杯数) = 2, query_glass(杯子的位置数) = 1, query_row(行数) = 1 输出: 0.5 解释: 我们在顶层(下标是(0,0)倒了两杯香槟后,有一杯量的香槟将从顶层溢出,位于(1,0)的玻璃杯和(1,1)的玻璃杯平分了这一杯香槟,所以每个玻璃杯有一半的香槟。
注意:
poured
的范围[0, 10 ^ 9]
。query_glass
和query_row
的范围[0, 99]
。
在真实的面试中遇到过这道题?
解题思路:
模拟题。先将总数为sum的香槟放入最顶上的杯子,也就是数组下标为[0][0]的地方复制为sum。假设dp[i][j]为数组下标为[i][j]获得的香槟总数,dp[0][0]=sum。
- 除dp[0][0]以外,所有值均为0.
- 如果sum>1,那么剩余的香槟必然溢出到下一层的[i+1][j]和[i+1][j+1]两个位置。
- 根据题意,等流量的条件,dp[i+1][j]+=(dp[i][j]-1)*0.5,dp[i+1][j+1]+=(dp[i][j]-1)*0.5。
- 迭代100次必然可以算出所有杯子的状态。
优化:
- 由于规模仅有100,所以2维数组也是可以的,因为每次只用到上一层的数据,所以可以简化为一维数组。
- 由于题目仅仅需要计算一个位置的状态,可以计算到该层后结束计算,不必每次都计算100层。
- 可能在某次计算之后,当前层不会发生溢出状态,则下面的全部是0,不必继续迭代。
//未经优化的代码 class Solution { |
Leetcode:799. 香槟塔相关推荐
- Java实现 LeetCode 799 香槟塔 (暴力模拟)
799. 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了 ...
- Leetcode 799. 香槟塔
我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都 ...
- LeetCode 799. 香槟塔(DP动态规划)
文章目录 1. 题目 2. 解题 1. 题目 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾 ...
- 力扣(LeetCode)799. 香槟塔(C++)
动态规划 设 iii 是行 , jjj 是列 , f[i][j]f[i][j]f[i][j] 表示经过杯子的酒量 ,初始 f[0][0]=pouredf[0][0]=pouredf[0][0]=pou ...
- 图解LeetCode——799. 香槟塔(难度:中等)
一.题目 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟, ...
- 799. 香槟塔 : 简单线性 DP 运用题
题目描述 这是 LeetCode 上的 799. 香槟塔 ,难度为 中等. Tag : 「动态规划」.「线性 DP」 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个 ...
- leecode.799. 香槟塔
题目 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任 ...
- 【LeetCode每日一题:799.香槟塔~~~模拟】
题目描述 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟, ...
- 【799. 香槟塔】
来源:力扣(LeetCode) 描述: 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的 ...
- 799. 香槟塔 ----- 动态规划、模拟、逆向
我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯 ...
最新文章
- 当年的程序员,如今已是父母,七个方法让孩子爱上学习!
- 电脑技巧:如何更改Win10桌面文件路径,轻松给系统盘瘦身!
- Hibernate如何存储二级缓存条目
- Hibernate教程– ULTIMATE指南(PDF下载)
- Java性能调优调查结果(第一部分)
- 【Java】输出50-100范围内所有的素数
- 【转载】这次拆库 应是微服务化的拆分方式
- 工作闲暇-曾经的“伪”前端+切图工作
- java集合框架之Collection
- 【TP】TP如何向模板中的js传变量
- 都说苹果秋季发布会像一杯白开水,那么...
- CXF学习创建WebService
- JWT实现接口双重认证,提供安全又不复杂的接口安全能力
- 亚马逊买家多账号如何运行管理?
- 哪一款信用卡累计兑换航空里程最划算?
- 《TCP/IP路由技术(第二卷)》一1.2 EGP的操作
- Java HashMap的遍历(常用的四种方式),及key,value规律
- 2017 Github优秀开源项目整理
- 相亲app开发,解决内存循环引用的问题
- 智能驾驶系统简介和测试要点分析
热门文章
- 设计模式-工厂模式(Factory)
- HardFault 异常定位
- 仿网易云音乐的YY音乐微信小程序源码
- [game]《泰坦陨落2》
- 论文笔记《Aspect-Aware Latent Factor Model:Rating Prediction with Ratings and Reviews》
- 微博图片设计模板素材推荐 精品 小众
- 深度学习研究生常用网站||图像处理||医学影像||使用评价||汇总
- IB计算机科学选课,IB体系应如何正确选课?
- 网页设计基础知识汇总——超链接
- 计算机组装中如何看硬件型号,如何查看主板型号?(三种方法!)