一、題目:
有n件物品和乙個容量為v的揹包。第i件物品的重量是w[i],價值是v[i]。求解將哪些物品裝入揹包可使這些物品的重量總和不超過揹包容量,且價值總和最大。
二、解決思路:
本題剛開始的解題的時候,想採取貪心演算法來解決,也就是將放入的物品的價效比按照從高到低進行排序,然後優先放優先順序高的,其次優先順序低的。
三、**實現(python)
1#重量w=[5,4,3,2]2#
價值v=[6,5,4,3]
3 b=
4 m=int(input("
請輸入揹包的最大重量:"))
5 n=int(input("
請輸入商品的數量:"))
6for i in
range(n):
7 a=input("
請分別輸入重量和價值,以空格隔開:")
8 a=a.split("")
9for i in
range(len(a)):
10 a[i]=int(a[i])
1112
print("
載入初始化:
",b)
13for i in
range(len(b)):
14for j in range(i+1,len(b)):
15if b[i][1]/b[i][0]b[j][0]:
16 b[i],b[j]=b[j],b[i]
17print("
價效比排序:
",b)
18 v=0
19 c=
20for i in
range(len(b)):
21if m-b[i][0]>0:
22 m=m-b[i][0]
2324 v+=b[i][1]
25print("
放入揹包:
",c)
26print("
最大價值為:
",v)
列印結果:
四、演算法分析:
貪心選擇是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。這是貪心演算法可行的第乙個基本要素,也是貪心演算法與動態規劃演算法的主要區別。貪心選擇是採用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡化為乙個規模更小的子問題。當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。一般是一維問題。
很明顯,此演算法在揹包問題上面解答是錯誤的,放入[[2,3],[3,4],[5,6]]時可達到最高值13
並沒有找到最優解,推薦的演算法為動態揹包演算法。
揹包問題 貪心演算法C Demo解析
貪心vs動態規劃 c demo感受 貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。個人對貪心演算法的理解是 貪心是有條件的,我們也常說貪心策略選擇,具有一定的時效性。而通常,基於選擇的性質,...
揹包問題(貪心演算法)
揹包問題 程式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 ...