01揹包 題解

2021-10-08 14:54:42 字數 685 閱讀 1790

略略

我們的狀態陣列f[i

][j]

f[i][j]

f[i][j

]指在揹包有j

jj的容量,只有前i

ii件物品時的最大價值

由於每種物品只有選與不選兩種情況

所以如果容量允許,那麼f[i

][j]

f[i][j]

f[i][j

]只有兩種選擇

選擇第i

ii件物品,或不選

(狀態轉移方程見**)

然鵝,我們可以使用一些奇妙的手段去掉陣列的一維,是空間複雜度更低

即去掉i

ii這一維,使用陣列表示揹包有j

jj的容量時的最優解

這裡有個細節,就是在進行遞推的時候,j

jj必須從大到小進行遍歷

否則會使用乙個更新過的值更新接下來的值

具體見**

o (n

∗m

)o(n*m)

o(n∗m)

#include using namespace std;

int f[1000][1000];

int w[1000];

int v[1000];

int main()

}cout

}

題解 01揹包

描述 乙個旅行者有乙個最多能裝 m 公斤的揹包,現在有 n 件物品,它們的重量分別是w1,w2,wn,它們的價值分別為c1,c2,cn,求旅行者能獲得最大總價值。輸入第一行 兩個整數,m 揹包容量,m 200 和n 物品數量,n 30 第2 n 1行 每行二個整數wi,ci,表示每個物品的重量和價值...

Dima and Salad 題解 01揹包變形

給你n個物品,每個物品有兩個值乙個為a,乙個為b 要你拿任意的物品使得 sum a sum b k 且max sum a 1 n 100 1 k 10 1 a i b i 100 乙個顯然易見的思路設 dp i j 為是否有 sum a i sum b j 然後最後複雜度為 o 1e10 顯然不行 ...

揹包 01揹包

01揹包 有n種物品與承重為m的揹包。每種物品只有一件,每個物品都有對應的重量weight i 與價值value i 求解如何裝包使得價值最大。dp i,v 表示前i個物體 包括第i個 面對容量為v的揹包的最大價值,c i 代表物體i的重量,w i 代表物體i的價值 如果第i個物體不放入揹包,則揹包...