饮料供货
编程之美1.6:饮料供货
#(Vi,Ci,Hi)(容量、最大数量、满意度) import pdb Vi = [1,1,3,4] Ci = [1,1,3,4] Hi = [5,1,3,4] N=4 V=5 opt=[[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]#最大满意度 rst=[[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]#选择物品个数 rut=[[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\ [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\ [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\ [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],\ [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]]#选择的路径信息、跟踪选择 def cal(v,n): for i in range(1,n+1): for j in range(1,v+1): for k in range(Ci[i-1]+1): vi = k*Vi[i-1] if j-vi < 0: break else: if opt[i-1][j-vi]+k*Hi[i-1]>opt[i][j]: opt[i][j] = opt[i-1][j-vi]+k*Hi[i-1] rst[i][j] = k rut[i][j][0] = i-1 rut[i][j][1] = j-vi cal(V,N) x = list(range(1,N+1)) x.reverse() i,j = 4,5 #pdb.set_trace() for index in x: print(rst[i][j]) temp = i i= rut[i][j][0] j= rut[temp][j][1]