Python动态规划计算0-1背包问题的最优值

本文详细介绍了使用Python实现动态规划解决经典的0-1背包问题,通过构建二维数组动态规划表格,找到装入物品的最大价值,探讨了如何通过状态转移方程求解最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from pprint import pprint as pp
def KnapSack(weight,value,capacity):   #计算最优值
    n=len(weight)-1
    m=[]
#初始化列表m,m[i][j]表示背包容量为j,可选物品为,,i+1...n时的最优值
    for i in range(0,n+1):   
        m.append([])
        for j in range(0,capacity+1):
            m[i].append([])

##########计算最优值######################################   
    tmpCapacity=min(weight[n],capacity)
    for j in range(0,tmpCapacity):
        m[n][j]=0
    for j in range(tmpCapacity,capacity+1):
        m[n][j]=value[n]
    for i in range(n-1,-1,-1):
        tmpCapacity=min(weight[i],capacity)
        for j in range(0,tmpCapacity):
            m[i][j]=m[i+1][j]  
        for j in range(tmpCapacity,capacity+1):
            m[i][j]=max(m[i+1][j],m[i+1][j-weight[i]]+value[i])
########输出结果##########################################
    print 'goods:'
    Traceback(m,weight,capacity) #输出最优解
    print 'MaxValue:',m[0][capacity-1] #打印出最优值
    for i in range(0,n+1):     #打印列表m
        print m[i]

 def Traceback(m,weight,capacity):#依据最优值构造最优解
    goods=[]
    length=len(weight)
    for i in range(0,length-1):
        if  m[i][capacity]==m[i+1][capacity]:
            goods.append(0)
        else:
            goods.append(1)
            capacity=capacity-weight[i]
    if  capacity<m[length-1][capacity]:
         goods.append(0)
    else:
        goods.append(1)
    print goods

def main():
    weight=[2,2,6,5,4]
    value=[6,3,5,4,6]
    c=10    #测试数据
    KnapSack(weight,value,c)

main()`这里写代码片`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值