利用贪心算法求解背包问题【python实现】

利用贪心算法求解背包问题【python实现】

求解思路:求出各物品价值与体积之比,由高到低排序,尽可能放价值比高的物品。

""""
    author:xuke
    实现功能:利用贪心算法求解背包问题
"""

#各物品的体积列表
v = []
#各物品的价值列表
val = []
#各物品编号
num = []
#各物品价格/体重
v_val = []
#输入背包体积
VS = eval(input("背包体积为:"))
#输入物品种类数
S = eval(input("物品种类数目为:"))
#输入各物品信息
for i in range(S):
    num.append(input("第{}类物品的编号为:".format(i+1)))
    v.append(eval(input("第{}类物品的体积为:".format(i + 1))))
    val.append(eval(input("第{}类物品的价值为:".format(i + 1))))

print("各物品信息:")
print("编号:{}".format(num))
print("体积:{}".format(v))
print("价值:{}".format(val))
#计算价格与体重之比
for i in range(S):
    v_val.append(val[i]/v[i])
#排序
for i in range(S):
    for j in range(i+1,S):
        if v_val[i] < v_val[j]:
            v_val[i],v_val[j] = v_val[j],v_val[i]
            v[i],v[j] = v[j],v[i]
            val[i],val[j] = val[j],val[i]
            num[i],num[j] = num[j],num[i]

print("编号:{}".format(num))
print("体积:{}".format(v))
print("价值:{}".format(val))

#不可分割物品
#当前背包占用体积
v1_now = 0
#当前背包内价值
val1_now = 0

print("背包内加入的物品编号有:",end='')
for i in range(S):
    if (v[i] + v1_now) <= VS:
        v1_now +=v[i]
        val1_now += val[i]
        print(num[i],end='')
    else:
        break
print()
#背包占用体积为
print("背包体积:{}".format(v1_now))
print("背包价值:{}".format(val1_now))

#可分割物品
#当前背包占用体积
v2_now = 0
#当前背包内价值
val2_now = 0

print("背包内加入的物品编号有:",end='')
for i in range(S):
    if (v[i] + v2_now) <= VS:
        v2_now +=v[i]
        val2_now += val[i]
        print(num[i],end='')
    elif v2_now < VS:
        last = VS - v2_now
        val2_now +=val[i]*(last/v[i])
        v2_now = VS
        print(num[i],end='')
    elif v2_now == VS:
        break

print()
print("背包价值:{}".format(val2_now))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值