揹包精講之 01揹包

2021-06-25 23:47:04 字數 707 閱讀 5916

了解01揹包時應該注意01揹包在問法上的差別:

初始化分兩種情況  

(1)、如果揹包要求正好裝滿則初始化 f[0] = 0, f[1~w] = -inf;  

(2)、如果不需要正好裝滿 f[0~v] = 0;  

題目 有n

件物品和乙個容量為

v的揹包。第

i件物品的費用是

c[i]

,價值是

w[i]

。求解將哪些物品裝入揹包可使價值總和最大。

整體思路:

揹包問題一直是困擾自己的一塊,今天開始著手整理揹包問題,第一種—01揹包不但是最簡單的動規問題,更是最簡單的揹包問題,但是還是乙個開始

揹包問題其實就是用體積作為遍歷物件,對所有的物品的體積遍歷,在v--的同時看是否能夠盛下,如果能夠,就在將剩下的體積所能盛下的最大值加到當前的體積所記錄的價值,迴圈,知道最後直接輸出v所對應的價值就是最優解。

其實在理解本演算法的時候,直接單純的想是很難理解的,本人看來還是需要舉一下例項,通過模擬演算法的過程來理解本演算法,在理解其大概之後再變化理解其精髓

解法一: 

狀態方程:   f[v]=max;

簡單一維陣列

#include #include #include using namespace std;

int main()

}cout《解法二

使用二維陣列,,,未完待續

01揹包精講

給定乙個物品集合s 物品i具有重量wi和價值vi。揹包能承受能承受的最大載重量不超過w。揹包問題就是找到乙個物品子集s 屬於s,使得maxewi w。所謂01揹包就是物品要麼整個地選取,要麼不取。首先我們先要肯定一件事,假設子問題 i,w 的最優裝載中含有物品i,則其中的子問題 i 1,w wi 的...

揹包九講之 01揹包

01揹包是最基礎的揹包問題,其中01代表的就是第i個物品的選或不選,在此先設v i 為體積,w i 為價值。很顯然,我們可以使用二位陣列dp i j 來表示前i個物品在揹包容量為j的時候可存放的最大價值。首先dp 0 0 0是很顯然的。而計算dp i j 時,存在01兩種情況 選或不選第i件物品。1...

DP 揹包九講之01揹包

有n件物品和乙個容量為v 的揹包。放入第i件物品耗費的空間是ci,得到 的價值是wi。求解將哪些物品裝入揹包可使價值總和最大。這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不 放。用子問題定義狀態 即f i,v 表示前i件物品恰放入乙個容量為v的揹包可以 獲得的最大價值。則其狀態轉移方...