去年的算法课挂了,本学期要重考,最近要在这方面下点功夫啦!

1.多边形游戏-动态规划
问题描述:
多边形游戏是一个单人玩的游戏,开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,
每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。
游戏第1步,将一条边删除。
随后n-1步按以下方式操作:
(1)选择一条边E以及由E连接着的2个顶点V1和V2;
(2)用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值通过边E上的运算得到的结果赋予新顶点。
最后,所有边都被删除,游戏结束。游戏的得分就是所剩顶点上的整数值。
 问题:对于给定的多边形,计算最高得分。
#! /usr/bin/env python
#coding=utf-8
import time
''''''
v = [-7,4,2,5]
op = ['+','*','*','+'] def m(a,b):
if b==1:
return v[a] max = float('-inf')
for i in range( 1,b ):
if op[ (a+i-1)%4 ]=='+':
temp = m( a%4,i ) + m( (a+i)%4, b-i )
elif op[ (a+i-1)%4 ]=='*':
temp = m(a % 4, i) * m((a + i) % 4, b - i)
if max<temp:
max,temp = temp,max return max for i in range(4):
for j in range(1,5):
print m(i,j),
print '\n'
time.sleep(100)

2.数塔问题-动态规划

设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示:

要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。

#! /usr/bin/env python
#coding=utf-8 v = [9,12,15,10,6,8,2,18,9,5,19,7,10,4,16] def m(a,b):
'''
本程序会重复计算一些m值
优化方法:将计算后的m存到一个字典里
'''
if a == 4:
return v[b] else:
L = m(a+1,a+b+1)
R = m(a+1,a+b+2)
if L > R:
return L + v[b]
else:
return R + v[b] if __name__ == '__main__':
print m(0,0)

 3.0-1背包问题-动态规划

背包问题(Knapsack problem)是一种组合优化的NP完全问题。
问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,
在限定的总重量内,我们如何选择,才能使得物品的总价格最高。
#! /usr/bin/env python
#coding=utf-8
import time
''''''
w = [2,1,3,2]#重量
v = [12,10,20,15]#价值
def m(i,j):
'''
形参i:背包中已有物品0 1 ··· i
形参j:背包剩余容量
返回值:当前最优值
'''
if i==-1 or j==0:
return 0
else:
if j>=w[i]:
m1 = m(i-1,j)#能装但不装
m2 = m(i-1,j-w[i])+v[i]#装
if m1>m2:
return m1
else:
return m2
else:
return m(i-1,j)#不能装 print m(3,5)

4.快速排序-分治法

时间复杂度

最好:O(nlogn)  最坏:O(n^2)  平均:1.38nlogn

#! /usr/bin/env python
#coding=utf-
import random def A(a,b):
if a==b:
return
elif == (b-a):
if list[a]>list[b]:
list[a],list[b] = list[b],list[a]
return
else:
i = a+
j = b
while i < j:
while i<b and list[i] <= list[a]:
i+=
while j>a+ and list[j]>=list[a]:
j-=
list[i],list[j] = list[j],list[i]
if i==j==a+ :
A(a+,b)
elif i==j == b:
list[a],list[j] = list[j],list[a]
A(a,b-)
else:
list[i],list[j] = list[j],list[i]
list[a],list[j] = list[j],list[a]
A(a,j-)
A(j+,b) list = [, , , , , , , ]
A(,)
print list

说明:源码纯属原创(写了半个下午),学术用途转载请注明出处,商业用途请先与我联系

参考:算法导论课件

python实现算法: 多边形游戏 数塔问题 0-1背包问题 快速排序的更多相关文章

  1. 数塔问题(DP算法)自底向上计算最大值

    Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数 ...

  2. python 常用算法

    算法就是为了解决某一个问题而采取的具体有效的操作步骤 算法的复杂度,表示代码的运行效率,用一个大写的O加括号来表示,比如O(1),O(n) 认为算法的复杂度是渐进的,即对于一个大小为n的输入,如果他的 ...

  3. python 常用算法学习(1)

    算法就是为了解决某一个问题而采取的具体有效的操作步骤 算法的复杂度,表示代码的运行效率,用一个大写的O加括号来表示,比如O(1),O(n) 认为算法的复杂度是渐进的,即对于一个大小为n的输入,如果他的 ...

  4. Python制作的射击游戏

    如果其他朋友也有不错的原创或译文,可以尝试推荐给伯乐在线.] 你有没有想过电脑游戏是怎样制作出来的?其实它没有你想象的那样复杂! 在这个教程里,你要学做一个叫<兔子和獾>的塔防游戏,兔子作 ...

  5. ACM 杭电HDU 2084 数塔 [解题报告]

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  6. HDU2084基础DP数塔

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  7. hdu----(2084)数塔(dp)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  8. HDU 2084 数塔(动态规划)

    数塔 http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描 ...

  9. hdu 2084 数塔 (简单dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=2084 数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory L ...

随机推荐

  1. DBA的做法

    防止有人删除数据库,创建一个触发器当数据库被删除是发送一份邮件给管理员并撤销这个命令. Create trigger [tridbsafe]ON ALL SERVERFOR DROP_DATABASE ...

  2. Element-ui多选下拉实现全部与其他互斥

    1.以事件类型为例,给下拉绑定选项改变的change事件 2.当已选项个数大于1(即先选了其他,再选不限)且最后选的是不限时,取消其他选项选中状态: 当已选项个数等于2(即先选了不限,再选其他)且第一 ...

  3. 梦织未来Windows驱动编程 第06课 驱动对磁盘文件的操作

    代码部分: 实现一个文件C:\\text.txt,并读取写入内容到文件,然后将文件设置为只读,并隐藏文件.代码如下: //MyCreateFile.c //2016.07.22 #include &l ...

  4. POJ 3614 Sunscreen(贪心,区间单点匹配)

    把牛的SPF看作一个区间,防晒霜看作点.一个点可以匹配C[i]次,问最大匹配数.可以用图论做. 也可以贪心.贪心的思想是,把区间和点排序以后,考虑最左边的点,加入和这个点相交的区间, 并排除出界的区间 ...

  5. 编译防火墙——C++的Pimpl惯用法解析

    http://blog.csdn.net/lihao21/article/details/47610309 Pimpl(pointer to implementation, 指向实现的指针)是一种常用 ...

  6. 分析ELF的加载过程

    http://blog.chinaunix.net/uid-72446-id-2060538.html 对于可执行文件来说,段的加载位置是固定的,程序段表中如实反映了段的加载地址.对于共享库来?段的加 ...

  7. 【洛谷2522】[HAOI2011] Problem b(莫比乌斯反演)

    点此看题面 大致题意: 求\(\sum_{x=a}^b\sum_{y=c}^d[gcd(x,y)==k]\). 关于另一道题目 在看这篇博客之前,如果你做过一道叫做[BZOJ1101][POI2007 ...

  8. 六、react添加多个className报错解决方法

    例如<div className={style.calss1,style.class2}></div> 该方法会报错 想得到最终渲染的结果:<div class='cla ...

  9. 漫谈 Clustering (番外篇): Vector Quantization

    在接下去说其他的聚类算法之前,让我们先插进来说一说一个有点跑题的东西:Vector Quantization.这项技术广泛地用在信号处理以及数据压缩等领域.事实上,在 JPEG 和 MPEG-4 等多 ...

  10. MySQL优化器功能开关optimizer_switch

    MySQL 8.0新增特性 use_invisible_indexes:是否使用不可见索引,MySQL 8.0新增可以创建invisible索引,这一开关控制优化器是否使用invisible索引,on ...