该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
300python普及课程群今天晚上讲解内容:
1.动态规划的理论知识,一些经典的动态规划问题的转移方程;
2.以01背包做为例题详解。
欢迎加盟!
;
今天晚上讲课已完毕,若新入群的学员,将为你重新讲课!
# -*- coding: utf-8 -*-
# python实现动态规划0,1背包问题
# for python 2.7
class Species(object):#
def __init__(self, x = None, y = None, z = None):
super(Species,self).__init__()
self.x = x #每个物件的价值
self.y = y #每个物件的重量
self.z = z #背包的容量
def fun1(self, LL, n, i):#类的方法
self.LL = LL
self.n = n
if i >= self.n:
return self.LL
else:
for j in xrange(1, self.z + 1):
self.LL[i][j] = self.LL[i - 1][j]
if j >= self.y[i] and self.LL[i - 1][j - self.y[i]] + self.x[i] > self.LL[i - 1][j]:
self.LL[i][j] = self.LL[i - 1][j - self.y[i]] + self.x[i]
return self.fun1(self.LL, n, i+1)
def fun2(self, LL, n, i = 1):
self.LL = self.fun1(LL, n, i)
for i in self.LL :
print i
self.Max = self.LL[self.n-1][self.z]
for i in xrange(self.n-1, -1, -1):
if self.LL[i][self.z] > self.LL[i - 1][self.z]:
self.z -= self.y[i]
else:
self.x[i] = None
return self.Max, self.x
if __name__=='__main__':
A=Species()
A.x = [0,2,8,3,4]
A.y = [0,1,7,5,6]
A.z = 1
n = len(A.x)
LL = [[itme*0]*(A.z + 1) for itme in xrange(n)]
print A.fun2(LL, n)
#============分隔线===============
# by 一颗幸福python
# QQ 191501000
# 300python普及课程群欢迎您!!!