用python画气球程序_动态编程气球最大得分(Python实现),规划,打,的,分数,python...
算法题:打气球的最大分数
最近在看左程云的《程序员代码面试指南》,感觉不错,题都分了类,很方便有目的的刷题,书里的代码都是java实现的,刚好最近在学习python,就用python去练习一下。
1. 问题描述
给定一个数组arr,代表一排有分数的气球。 每打爆一个气球都能获得分数,假设打爆气球的分数为X,获得分数的规则如下:
1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为L:如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为R.获得分数为LXR
2)如果被打爆的气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为L:如果被打爆气球的右边所有气球都已经被打爆,获得分数为LX。
3)如果被打爆气球的左边所有的气球都已经被打爆:如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球。获得分数为XR.
4)如果被打爆气球的左边和右边所有的气球都已经被打爆。获得分数为X。
目标是打爆所有气球,获得每次打爆的分数。通过选择打爆气球的顺序,可以得到不同的总分,请返回能获得的最大分数
2.解决方法
1)暴力递归:假设arr[L-1]和arr[R+1]都没爆,要打爆arr[L]到arr[R]的气球,假设arr为[L~R],可以设置一个help数组,添加arr[L-1]和arr[R+1]并将值值设为1。如此便对于相乘便无影响。对于L和R位置,对于普通位置i分别递归地求解。
2)动态规划:以L和R为可变参数作m表,将表画出可以发现,m[i][j]代表i~j上打爆所有气球的最大分数,对于每个位置,其值只依赖于其左侧和正下方的值。则从下往上的完成m表,可以得到结果。
3.代码实现
暴力递归
# 暴力递归
def process(arr, L, R):
if L == R:
return arr[L-1] * arr[L] * arr[R+1]
max_score = max(arr[L-1] * arr[L] * arr[R+1] + process(arr, L+1, R), arr[L-1] * arr[R] * arr[R+1] + process(arr, L, R-1))
for i in range(L+1, R):
max_score = max(max_score, arr[L-1] * arr[i] * arr[R+1] + process(arr, L, i-1) + process(arr, i+1, R))
return max_score
动态规划
# 动态规划
def score(arr):
m = [[0 for i in range(len(arr))] for j in range(len(arr))]
for i in range(1, len(arr)-1):
m[i][i] = arr[i-1] * arr[i] * arr[i+1]
# 求解m[i][j],m[i][j]代表i~j上打爆所有气球的最大分数
L = len(arr) - 2
while L >= 1:
R = L + 1
while R <= len(arr) - 2:
# 最后打爆arr[L]的情况
finalL = arr[L-1] * arr[L] * arr[R+1] + m[L+1][R]
# 最后打爆arr[R]的情况
finalR = arr[R+1] * arr[R] * arr[L-1] + m[L][R-1]
# 先比较一下arr[L]和arr[R]的情况
m[L][R] = max(finalL, finalR)
# 对一般情况进行分析
for i in range(L+1, R):
m[L][R] = max(m[L][R], arr[L-1] * arr[i] * arr[R+1] + m[L][i-1] + m[i+1][R])
R += 1
L -= 1
print("m表:")
for item in m:
for i in item:
print(i, end = '\t')
print()
return m[1][len(arr)-2]
if __name__ == "__main__":
help_arr = [1, 4, 2, 3, 5, 1, 6, 1]
print("(递归)最大分数为:{0}".format(process(help_arr, 1, 6)))
print("(动态规划)最大分数为:{0}".format(score(help_arr)))
结果:
(递归)最大分数为:264
m表:
0 0 0 0 0 0 0 0
0 8 36 104 109 258 264 0
0 0 24 84 104 234 258 0
0 0 0 30 40 156 168 0
0 0 0 0 15 120 138 0
0 0 0 0 0 30 60 0
0 0 0 0 0 0 6 0
0 0 0 0 0 0 0 0
(动态规划)最大分数为:264
用python画气球程序_动态编程气球最大得分(Python实现),规划,打,的,分数,python...相关推荐
- python画正方形程序_画正方形-小学生 Python 入门课
画正方形 还没开始学就要画正方形啊!会不会太难啊? 今天主要是教大家简化版的程序设计流程,其实和大家在日常生活中做的事情是一样的. 第一步:准备画画的工具包(纸和铅笔) 用Python代码就是导入工具 ...
- python画棒棒糖程序_论文画图神器!25个常用Matplotlib图的Python代码,收藏收藏!...
作者:zsx_yiyiyi 编辑:python大本营 大家好,今天要分享给大家25个Matplotlib图的汇总,在数据分析和可视化中非常有用,文章较长,可以马起来慢慢练手. # !pip insta ...
- python画棒棒糖程序_用python 画几个简单图案
from random importchoice # random 的choice方法能够在你给出的结果里随机选择一个importmatplotlib.pyplot as plt # 引入matplo ...
- python画圆形螺旋线_宝宝爱看小猪佩奇,很简单,让我们用python搞定它
现在很多宝宝喜欢看小猪佩奇,今天就教大家用python的海龟画图画一个乖巧萌萌的小猪佩奇,引导对编程产生浓浓 的兴趣. 画图前引导 1.让我们打开百度,输入python进入python官网 2.在官网 ...
- python好学吗 老程序员-使用 Python 会降低程序员的编程能力吗?
某些情况下会降低编程能力,某些情况下会提升编程能力,要看你怎么理解"编程能力". 1.使用 Python 会降低程序员的编程能力,这个假设成立的情形 如果强行要说使用Python可 ...
- python初学者编程指南_动态编程初学者指南
python初学者编程指南 编程辅导 (PROGRAMMING TUTORIAL) Dynamic programming is an art, the more problems you solve ...
- python画静态烟花_人人都可以写的可视化Python小程序第二篇:旋转的烟花
兴趣是最好的老师 枯燥的编程容易让人放弃,兴趣才是最好的老师.无论孩子还是大人,只有发现这件事情真的有趣,我们才会非常执着的去做这件事,比如打游戏.如果编程能像玩游戏一样变得有趣,我相信很多人就特别愿 ...
- python简单图画程序_用Python的Turtple画图形
不知道各位是否还记得在小学或者初中的时候,我们接触过一种语言叫做logo语言,这个语言可以画正方形,画三角形,画圆.而用Python画图形也有点类似logo语言的意思. 在画图之前,我们需要启动一个模 ...
- df python 增加数据_美国确诊超100万!教你用Python画出全球疫情动态图(附数据下载)...
CDA数据分析师 出品 [导语]:今天我们教你用Python绘制全球疫情动态图,技术部分请看第二部分. 获取数据:扫描下方公众号回复关键字"全球疫情" 目前,全球新冠疫情还十 ...
- python画爱心原理_程序员式优雅表白,教你用python代码画爱心
还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧!PyCharm pro Mac-PyCharm pro for Mac( Py ...
最新文章
- python基础 while循环练习
- sql必知必会(第四版) 学习笔记二 视图
- 汉语拼音+脑洞[BJDCTF 2nd]老文盲了
- 刺激战场战斗服务器无响应,绝地求生刺激战场网络异常怎么办 波动异常解决...
- Struts2中jsp page=xxx.action/jsp失效
- 常见的php笔试题(附答案)搜集整理
- redis 清空缓存_「镜头回放」简直了!spring中清除redis缓存导致应用挂死
- mysql删除密码代码_mysql 用户新建、受权、删除、密码修改
- IDEA打jar包时出现manifest.mf already exists in vfs解决办法
- 高项信息系统项目管理师考试大纲——重点知识
- Java中数据类型转换大全(个人总结)
- 英语总结系列(二十二):Baby偶遇GCT
- 普通摄像头的数据输出格式YUV与mjpeg之间联系、DCT离散余弦变换去噪跟压缩(待补充)
- detectron2 ImportError: cannot import name ‘_C‘ from ‘detectron2‘
- Python多进程之Pool
- GPS数据格式:NMEA-0183协议
- 树莓派基于QT实现利用USB转485模块进行串口通讯
- 第11章实验1:学生成绩管理系统V4.0
- 基于Ubuntu(x86)系统和STM32(Keil)编写C程序分别进行编程、验证
- 翻转——C++青少年一级考资料
热门文章
- 百度杀毒+7654联盟
- 新美大--软件测试--《社招、校招jd、公司具体介绍、培训发展、关于实习是什么,要求及常见问题、校招行程、校招常见问题》整理
- Codeforces1389 E. Calendar Ambiguity(数论)
- 717 1比特与2比特字符
- [GIS原理] 8.2 空间分析-邻近度分析-Delaunay三角网(德劳内)/泰森多边形(Thiessen多边形)/冯洛诺伊图(Voronoi图)
- safenet 超级狗 java调用 小计
- 白帽子讲Web安全(第 1 章 我的安全世界观)
- [周更]5.unity3D 三体运动(简易版)
- 磕技术、筑平台,浪潮存储如何持续破局?
- 分子量(Molar Mass, ACM/ICPC Seoul 2007, UVa1586)