揹包問題,簡單明瞭,快速回憶

2021-09-27 04:22:16 字數 1036 閱讀 4503

有n種物品和乙個容積為v的揹包,每種物品i都有(1,無限,有限k[i])個,都有體積cost[i]和價值value[i],問如何選取物品使得放入揹包的物品價值之和最大。

假設有物品a的價值5,代價5。物品b的價值7,代價8,總容量為10,求最大價值

cost

value

i\c012

3456

78910

0000

0000

0000

0055

1000

0055

5555/1087

2000

0055

5777/10

容量夠,取最大值

裝不下去和不取結果都是取上一行即不存在i的情況下的值b[i-1][c]。

把剩餘空間看成所需空間,你要裝i,那麼你所需的空間就要加上k倍的cost[i],並且值加上value[i]。

k意思是取幾個i,其範圍(1、1-v/cost[i]、1-k[i])取決於哪種揹包問題,通過for迴圈遍歷整個k並選擇最大作為結果

二維陣列是一行一行更新,如果不在意前面怎麼取的話可以用乙個一維陣列,每次更新一維陣列即一行,更新i次,更新完取最後個值即答案

當k限制為1即0-1揹包問題時,因為如果c順序是從前往後,會出現:首先前cost[i]-1肯定不變,因為裝不下,然後填充cost[i]到2倍的cost[i]-1時也沒問題,可接下去填充2·cost[i]時,需要用到上一行cost[i]的值,此時已被替代成拿乙個i的情況了,所以不行。

其他情況下,前面說過,當填2·cost[i]時,這裡需要的就是可以拿多個的情況,必須要更新後的值,所以是從前往後。

簡單揹包問題

設有乙個揹包可以放入的物品重量為s,現有n件物品,重量分別是w1,w2,w3,wn。問能否從這n件物品中選擇若干件放入揹包中,使得放入的重量之和正好為s。如果有滿足條件的選擇,則此揹包有解,否則此揹包問題無解。input 輸入資料有多行,包括放入的物品重量為s,物品的件數n,以及每件物品的重量 輸入...

簡單揹包問題

有乙個容量為v的揹包,從n件物品中選擇一些放入揹包中,每件物品的重量為w i 為v i 怎麼選擇合適的物品使得揹包內物品的總價值最大.這個問題中每個物品可供選擇的次數是0或1.即簡單揹包問題.若可選擇次數為n n為乙個有效的數字 則稱之為有界揹包問題.若可選擇次數無限,則稱之為無界揹包問題.所有的揹...

簡單揹包問題

設有乙個揹包可以放入的物品重量為s,現有n件物品,重量分別是w1,w2,w3,wn。問能否從這n件物品中選擇若干件放入揹包中,使得放入的重量之和正好為s。如果有滿足條件的選擇,則此揹包有解,否則此揹包問題無解。輸入輸入資料有多行,包括放入的物品重量為s,物品的件數n,以及每件物品的重量 輸入資料均為...