weight=[1,4,4,2,3]
value=[1,2,3,5,3]
op=[0]*len(weight)
Limit_weight_X=6
MAX_value_X=0
X_load_weight=0
op1=[]
weight1=[]
value1=[]
Limit_weight_Y=4
MAX_value_Y=0
Y_load_weight=0defboatX(i,weight_X,value_X):global op
global op1
global MAX_value_X
global X_load_weight
if i==len(op):if value_X>MAX_value_X :
MAX_value_X=value_X
X_load_weight=weight_X
for i inrange(len(op)):
x_op[i]=op[i]else:if weight_X+weight[i]<=Limit_weight_X:
op[i]=1
boatX(i+1,weight_X+weight[i],value_X+value[i])
op[i]=0
boatX(i+1,weight_X,value_X)defboatY(i,weight_Y,value_Y):global op1
global op2
global MAX_value_Y
global Y_load_weight
if i==len(op1):if value_Y>MAX_value_Y :
MAX_value_Y=value_Y
Y_load_weight=weight_Y
for i inrange(len(op1)):
y_op[i]=op1[i]else:if weight_Y+weight1[i]<=Limit_weight_Y:
op1[i]=1
boatY(i+1,weight_Y+weight1[i],value_Y+value1[i])
op1[i]=0
boatY(i+1,weight_Y,value_Y)#1.X船装货物----------------------------------------
x_op=[0]*len(weight)
boatX(0,0,0)print("1.X船装货情况:",x_op,",载重:",X_load_weight,",装载价值:",MAX_value_X)#2.清理剩余货物-----------------------------------------------------for i inrange(len(x_op)):if x_op[i]==0:
op1.append(x_op[i])
weight1.append(weight[i])
value1.append(value[i])print("2.剩余货物:",op1,",重量:",weight1,",对应价值:",value1)#3.Y船装货物------------------------------------------------------------------------
y_op=[0]*len(op1)
boatY(0,0,0)print("3.Y船装货情况:",y_op,",载重:",Y_load_weight,",装载价值:",MAX_value_Y)#4.求和-------------------------------------------------------------print("4.X、Y两船装载货物最大价值:",MAX_value_Y+MAX_value_X)
2.回朔法解决01背包问题01背包问题
weight=[5,3,2,1,4,4,2]
value=[4,4,3,1,2,3,5]
max_number=4
op=[0]*len(weight)
weight_X=0
value_X=0
max_weight=6
max_value=0
op_weight=0
max_op=[1,1,1,1,1,1,1]deffun(i,weight_X,value_X):global op
global max_value
global op_weight
if i==len(op):print("购买商品状况",op,"总重量为",weight_X,"当前的价值为",value_X)if value_X>max_value:
max_value=value_X
op_weight=weight_X
for i inrange(len(op)):
max_op[i]=op[i]else:if weight_X+weight[i]<=max_weight:
op[i]=1
fun(i+1,weight_X+weight[i],value_X+value[i])
op[i]=0
fun(i+1,weight_X,value_X)
fun(0,0,0)print("最终购买商品状况",max_op,"总重量为",op_weight,"最大的价值为",max_value)