决策过程如下
- 每次考虑一个背包是否放下,从第一个到最后一个
- 比较放这个和后面的,不放这个和后面的效益哪个高
决策树
代码
class Jilu(float):
def __new__(cls,value,jilu):
o=super(Jilu,cls).__new__(cls,value)
if type(jilu) is not list:
o.jilu=[jilu]
else:
o.jilu=jilu
return o
def __add__(self,jl):
a=self.__float__()+jl
if type(self)==type(jl):
tp=self.jilu=self.jilu+jl.jilu
else:
tp=self.jilu
return self.__new__(Jilu,a,self.jilu)
def __str__(self):
t1=self.__float__()
t2=self.jilu
return "value:{0},jilu:{1}".format(t1,t2)
class jc():
def __init__(self,bb:list):
self.bb=bb
def dg(self,n=0,wt=0):
if n>=self.bb.__len__():
return Jilu(0,'')
if wt<self.bb[n][0]:
t1=-1
t2=self.dg(n+1,wt)
pass
if wt>=self.bb[n][0]:
t1=Jilu(self.bb[n][1],str(n))+self.dg(n+1,wt-self.bb[n][0])
t2=self.dg(n+1,wt)
pass
return max(t1,t2)
bb=[(2,2),(2.5,3),(4,5),(5,8),(1,2),(3,4),(3,4)]
a=jc(bb)
print(a.dg(wt=10))
|