乙個小偷在某個商店發現有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...