Leetcode799. 香槟塔
文章目录
- 题目链接
- 题目大意
- 解题思路
- 代码(C++)
- 递推
- 递归
题目链接
点我 (^_^)
题目大意
解题思路
一开始看到这个 poured
范围这么大,以为是可以直接推出数学公式,但推了半天没推出来。
然后发现,直接从顶部开始模拟即可,某个row
下的某个 glass
的体积等于其上面两个glass
的体积 - 1 相加再除2,可以写成如下公式:
Vrowglass=(Vrow−1glass−1−1)/2+(Vrow−1glass−1)/2V_{row}^{glass}=(V_{row-1}^{glass-1}-1)/2+(V_{row-1}^{glass}-1)/2Vrowglass=(Vrow−1glass−1−1)/2+(Vrow−1glass−1)/2
当然对于最外面的两个杯子的体积,只和其上面一个杯子的体积有关。 最后结果注意要和 1
取最小值。
当然,算法既可以写成递归形式,也可以写成递推形式,递归形式要使用记忆化搜索,否则会超时。
代码(C++)
递推
class Solution {public:double champagneTower(int poured, int query_row, int query_glass) {vector<double> row = {(double)poured};for (int i = 1; i <= query_row; i++) {vector<double> nextRow(i + 1, 0.0);for (int j = 0; j < row.size(); j++) {double volume = row[j];if (volume > 1) {nextRow[j] += (volume - 1) / 2;nextRow[j + 1] += (volume - 1) / 2;}}row = nextRow;} return min(1.0, row[query_glass]);}
};
递归
class Solution {public:double dp[105][105];double eps = 0.000000001;double func(double poured, int query_row, int query_glass) {if (query_row == 0)return poured;if(dp[query_row][query_glass] != -1)return dp[query_row][query_glass];if(query_glass == 0)return dp[query_row][query_glass] = max(0.0, (func(poured, query_row-1, 0)-1) / 2);if(query_glass == query_row)return dp[query_row][query_glass] = max(0.0, (func(poured, query_row-1, query_glass-1)-1) / 2);return dp[query_row][query_glass] = max(0.0, (func(poured, query_row-1, query_glass-1)-1) / 2) + max(0.0, (func(poured, query_row-1, query_glass)-1) / 2);}double champagneTower(int poured, int query_row, int query_glass) {for(int i=0; i<100; ++i)for(int j=0; j<=i; ++j)dp[i][j] = -1;return min(1.0, func((double)poured, query_row, query_glass));}
};
Leetcode799. 香槟塔相关推荐
- Leetcode 799. 香槟塔
我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都 ...
- leecode.799. 香槟塔
题目 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任 ...
- 二维香槟塔问题分析过程记录
二维香槟塔物理模型分析 在取消酒杯数量和行数的限制下,还原倒酒全过程,深度分析第[i,j]个酒杯注满需要多少杯酒 这篇笔记先单纯分析问题 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有 ...
- LC-799.香槟塔
8月22号腾讯笔试题 "水站的水流量" 799. 香槟塔 难度中等 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每 ...
- Java实现 LeetCode 799 香槟塔 (暴力模拟)
799. 香槟塔 我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了 ...
- 799. 香槟塔 : 简单线性 DP 运用题
题目描述 这是 LeetCode 上的 799. 香槟塔 ,难度为 中等. Tag : 「动态规划」.「线性 DP」 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个 ...
- 【每日一题Day33】LC799香槟塔 | 动态规划
香槟塔[LC799] 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的第一个玻璃杯开始倾 ...
- leetcode799:香槟塔
题目表述: 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 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日记(香槟塔)第三天
题目如下: 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟. 从顶层的第一个玻璃杯开始倾倒一些香槟 ...
最新文章
- CentOS7的firewall和安装iptables
- 立即终止Sleep的线程
- 淘宝店铺图片数据迁移核心代码
- 在pytorch中自定义dataset读取数据2021-1-8学习笔记
- SpringBoot 异常回滚 事务的使用___Springboot @Transactional 事务不回滚
- 资源分享 | 知识蒸馏总结、应用与扩展(2015-2019)
- 都说90后不好管?聊聊跳槽这件事儿
- 【工具相关】Web-Sublime Text2的用法(一)
- java写培根披萨和海鲜披萨_java子类继承父类实例-披萨的选择实现代码
- 怎么根据错误弹窗 判断进程_苹果手机弹窗bug是什么情况?苹果手机为什么会出现弹窗bug要怎么解决?...
- 所有程序员都应该知道的 6 个软件开发步骤
- 怎么使用outlook发送邮件?outlook群发邮件怎么撤回?
- 【机器学习与算法】python手写算法:Kmeans和Kmeans++算法
- containers详解
- 王者荣耀选手退役后转行Python,自学的那种!网友:中国版“阿甘”
- Python学习---根据excel的内容自动批量修改excel名称
- 触觉马达DRV2605
- 计算机网络中传输速率最快的,计算机网络中常用的传输介质中传输速率最快的是什么...
- 基于steam的游戏销量预测 — PART 1 — 爬取steam游戏相关数据的爬虫
- 显示HP小型机配置信息的相关命令
热门文章
- outlook邮件通过python发送_怎么发送邮箱-python调用outlook发送邮件的超详细操作步骤...
- Linux 系统编程-文件IO-文件描述符、open函数的使用、实现touch命令
- [线段树]打字练习记录
- Serialization
- ElasticSearch head 安装
- 微信小程序个人/企业开放服务类目一览表
- C# word类库 光标移动
- 数据是一把双刃剑,IPFS/FIL存储助力发展,合理应用技术中
- python idle界面_3.7 IDLE 用户界面
- 治军首在选将,余承东挂帅华为云