题目如下:

解题思路:本题如果用递归来做,思路会非常清晰。每个杯子得到的总的香槟的数量,减去自身杯子容量后,多余的部分均分成两部分,下层的两个杯子各得一半,但是这种解法在输入香槟较大的情况下会导致超时。更加合适的是用动态规划的方法,因为递推关系式很容易就能找到。对于任意一个杯子dp[i][j]来说,它的输入来自于dp[i-1][j]和dp[i-1][j-1]溢出的部分的一半,所以表达式为 dp[i][j] =  max(0,(dp[i-1][j] - 1)/2) + max(0,(dp[i-1][j-1]-1)/2)。

代码如下:

class Solution(object):
def champagneTower(self, poured, query_row, query_glass):
"""
:type poured: int
:type query_row: int
:type query_glass: int
:rtype: float
"""
dp = []
level = 100
for x in range(level):
l = [0.0 for x in range(level)]
dp.append(l)
dp[0][0] = poured
for i in range(1,query_row+1):
for j in range(query_glass+1):
dp[i][j] += max(0,float(dp[i-1][j] - 1)/2)
if j-1 >= 0:
dp[i][j] += max(0,float(dp[i-1][j-1]-1)/2)
return min(1,dp[query_row][query_glass])

最新文章

  1. Tornado学习笔记12 tornado.httpserver-.非阻塞的Http服务器
  2. centos6.3(64位) 安装apr
  3. ASP.NET中的Image和ImageButton控件
  4. oracle 密码忘记、密码遗失解决办法
  5. c语言编程之二叉树
  6. 有效处理java异常的三个原则
  7. Binary Tree Zigzag Level Order Traversal 解答
  8. 662 - Fast Food
  9. Linux_Cytoscape
  10. LODOP获取打印机状态码和状态码含义测试
  11. D. Concatenated Multiples(离线处理)
  12. Java中解决前端的跨域请求问题
  13. 微信web开发者工具 移动调试
  14. hashlib、hmac
  15. 进制转换(NOIP2000&NOIP水题测试(2017082301))
  16. NO 18---- webpack 4.x 使用遇到的问题以及开发配置
  17. Unity3D手游开发日记(6) - 适合移动平台的水深处理
  18. 手把手教你利用微软的Bot Framework,LUIS,QnA Maker做一个简单的对话机器人
  19. 20154327 Exp5 MSF基础应用
  20. 【对询问分块】CODEVS1080 线段树练习

热门文章

  1. C#高级应用
  2. Apache监控调优
  3. YARN日志聚合相关参数配置
  4. selenium学习-对当前浏览器窗口截屏
  5. js函数的定义和调用
  6. CentOSLinux安装Docker容器
  7. (4.25)Sqlserver中 登录用户只能看到自己拥有权限的库
  8. bootstrap使用总结(carousel设置大小。item设置大小,img设置大小)
  9. docker容器配置hosts
  10. Docker Compose 部署 Redis 及原理讲解 | 懒人屋