python动态规划01背包_主题:动态规划之01背包

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

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普及课程群欢迎您!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值