利用貪心演算法求解揹包問題 python實現

2021-10-09 05:04:39 字數 2615 閱讀 6214

求解思路:求出各物品價值與體積之比,由高到低排序,盡可能放價值比高的物品。

""""

author:xuke

實現功能:利用貪心演算法求解揹包問題

"""#各物品的體積列表

v =[

]#各物品的價值列表

val =

#各物品編號

num =

#各物品**/體重

v_val =

#輸入揹包體積

vs =

eval

(input

("揹包體積為:"))

#輸入物品種類數

s =eval

(input

("物品種類數目為:"))

#輸入各物品資訊

for i in

range

(s):

input

("第{}類物品的編號為:"

.format

(i+1))

)eval

(input

("第{}類物品的體積為:"

.format

(i +1)

)))eval

(input

("第{}類物品的價值為:"

.format

(i +1)

)))print

("各物品資訊:"

)print

("編號:{}"

.format

(num)

)print

("體積:{}"

.format

(v))

print

("價值:{}"

.format

(val)

)#計算**與體重之比

for i in

range

(s):

/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 =

0print

("揹包內加入的物品編號有:"

,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 =

0print

("揹包內加入的物品編號有:"

,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)

)

揹包問題(貪心演算法)

揹包問題 程式8 4 2.cpp 定義控制台應用程式的入口點。揹包問題 貪心演算法 include stdafx.h define maxnumber 20 typedef struct node object float find object wp,int n,float m i 0 while...

貪心演算法 揹包問題

詳細見原帖 我寫的是自己的感悟 揹包問題 有乙個揹包,揹包容量是m 150。有7個物品,物品可以分割成任意大小。要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。物品 a b c d e f g 重量 35 30 60 50 40 10 25 價值 10 40 30 50 35 40 30 ...

貪心演算法 揹包問題

貪心演算法 當前最優解 例如在刪除數的乙個例子中,乙個長度不大於240位的整數中,隨機刪除n個數,要求使得剩餘的數 從左到右的,組成乙個最小的整數 貪心步驟 例如 乙個數 1457326 n 4 1 找到當前最大的數 7 刪除 145326 2 找到當前最大的數 6 刪除 14532 3 找到當前最...