python 揹包問題

2021-10-01 06:33:03 字數 1475 閱讀 9440

乙個小偷在某個商店發現有n個商品,第i個商品價值 v

iv_i

vi​元,中w

iw_i

wi​千克。他希望拿走的價值盡量高,但他的揹包最多只能容納w千克的東西。他應該拿走拿些商品? 例如

商品1: v

1v_1

v1​=60 w

1w_1

w1​=10

商品2: v

2v_2

v2​=100 w

2w_2

w2​=20

商品3: v

3v_3

v3​=60 w

3w_3

w3​=30

揹包容量: w=50

對於0-1揹包和分數揹包,貪心演算法是否都能得到最優解?為什麼?

#!

/usr/bin/env python

# -*

- coding: utf-8-

*-goods =[(

60,10)

,(100,20)

,(120,30)

] # 每個商品元組表示(**, 重量)

#降序排列

goods.

sort

(key=lambda x: x[0]

/x[1

], reverse=true)

#貪心要拿值錢的 w填滿

def fractional_backpack

(goods, w)

:print

(goods)

print

(w) m =[0

for _ in range

(len

(goods))]

print

(m) total_v =

0#i是索引

for i,

(prize, weight) in enumerate

(goods)

:print

(w,weight)

if w >= weight:

m[i]=1

total_v +

= prize

#w是揹包的重量開始減少 weight是商品的重量

w -= weight

else

: m[i]

= w / weight

total_v +

= m[i]

* prize

#乙個商品都拿不走了

w =0break

return total_v, m

#揹包就是50

python揹包問題 揹包問題Python

題目 揹包容量ba 物品thing v 問題 1.是否可以裝滿揹包2.裝滿揹包最少需要多少件物品3.裝滿揹包最多需要多少件物品4.該揹包最多一共可以裝多重的物品5.裝滿揹包一共有多少種方案 就算物品重量一樣,但也是不同的方案 一 01揹包 def bag 01 bag v,thing v 是否可以裝...

揹包問題 python

今天做筆試的時候第一道題是揹包問題的變形,但是死活想不出來怎麼做,在此記錄一下三種揹包問題的思路和基本 問題描述 有n件物品和容量為m的揹包 給出i件物品的重量w i 以及v i 價值,求解讓裝入揹包的物品重量不超過揹包容量,且價值最大 思路 i件物品,重量限制為j的最大價值設為f i j 該值取決...

python解決揹包 揹包變形問題

有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。例如 揹包的承重為10,現在有a,b,c,d,e五件物品,每件物品的重量分別為2,2,6,5,4,價值分別為6,3,5,4...