饮料供货

编程之美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]

 

posted @ 2014-02-10 21:06  平凡之路  阅读(153)  评论(0)    收藏  举报