昨天看了01揹包,完全揹包,和多重揹包這三個問題,然後呢,01和完全的區別在於順序還是倒序.今天偷點懶,寫完解題報告就滾床睡,,剛才看到了whud大牛的部落格,好棒,真的好棒,自己要加油啦,在2023年希望有個質的飛越。
揹包問題是dp問題的乙個分支,所有揹包問題呢,都是可以劃分到01揹包這個最簡單基礎的揹包問題上,然後呢,我們要盡量類揹包問題轉化到01揹包問題····
我們先說說01揹包有n
件物品和乙個容量為
v的揹包。第
i件物品的費用是
c[i]
,價值是
w[i]
。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
對於這個問題呢,我們需要考慮的是放或者不放,這個才是最重要,所以不難有狀態轉移方程 dp[i][v] = max(dp[i-1][v],dp[i-1][v-c[i]]+w[i])
dp[i][v]表達的是第i件物品放入容積v中的價值,
這個狀態轉移方程就兩個方向,放還是不放,如果不放第i件物品的話,就應該是dp[i-1][v],也就是與i-1件物品放入容量v中的價值與放第i件商品,轉化為前
i-1件物品放入剩下的容量為
v-c[i]
的揹包中的價值比較。
這個複雜度已經無法優化,但是空間我們還是可以繼續優化的
for(int i = 1;i<=n;i++)物品種類
}恩,這個就差不多是01揹包兩種方法的解釋了
為什麼費用迴圈是要從v開始的呢
這正是為了保證每件物品只選一次,保證在考慮
「選入第
i件物品
」這件策略時,依據的是乙個絕無已經選入第
i件物品的子結果
f[i-1][v-c[i]]
DP之揹包學習記錄(三)
說完了01揹包,完全揹包,我們接著學習多重揹包,還是介紹下問題題目有 n種物品和乙個容量為 v的揹包。第 i種物品最多有 n i 件可用,每件費用是 c i 價值是 w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。我們還是老樣子,先寫出多重揹包的類似於01揹包的狀...
DP學習之完全揹包
有 n nn 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。第 i ii 種物品的體積是v iv i vi 價值是 w iw i wi 求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。資料範圍 0 v 1000 00v 10 000 wi 1000 00 wi 1...
揹包dp之01揹包
現在我們有n個配件,他們有不同的價值.但是我們揹包的容量是有限的,因為我們只有乙個一級包,所以我們最多可以裝v重量的東西.但是為了能更好的吃到雞 不存在的 我們要攜帶更有價值的配件,請問我們最多能拿多少價值的配件來當快遞員呢?輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第一行包含兩...