問題
二維費用的揹包問題是指:對於每件物品,具有兩種不同的費用;選擇這件物品必須同時付出這兩種代價;對於每種代價都有乙個可付出的最大值(揹包容量)。問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價1和代價2,第i件物品所需的兩種代價分別為a[i]和b[i]。兩種代價可付出的最大值(兩種揹包容量)分別為v和u。物品的價值為w[i]。
演算法
費用加了一維,只需狀態也加一維即可。設f[i][v][u]表示前i件物品付出兩種代價分別為v和u時可獲得的最大價值。狀態轉移方程就是:f [i][v][u]=max。如前述方法,可以只使用二維的陣列:當每件物品只可以取一次時變數v和u採用逆序的迴圈,當物品有如完全揹包問題時採用順序的迴圈。當物品有如多重揹包問題時拆分物品。
物品總個數的限制
有時,「二維費用」的條件是以這樣一種隱含的方式給出的:最多只能取m件物品。這事實上相當於每件物品多了一種「件數」的費用,每個物品的件數費用均為1,可以付出的最大件數費用為m。換句話說,設f[v][m]表示付出費用v、最多選m件時可得到的最大價值,則根據物品的型別(01、完全、多重)用不同的方法迴圈更新,最後在f[0..v][0..m]範圍內尋找答案。
另外,如果要求「恰取m件物品」,則在f[0..v][m]範圍內尋找答案。
小結
事實上,當發現由熟悉的動態規劃題目變形得來的題目時,在原來的狀態中加一維以滿足新的限制是一種比較通用的方法。希望你能從本講中初步體會到這種方法。
二維費用的揹包問題
題目 toj3596 題意 有n張光碟,每張光碟有乙個價錢,現在要從n張光碟中買m張,預算為l,每張光碟有乙個快樂值,要求在不超過預算並且恰好買m張,使得快樂值最大。解答 典型的二維費用揹包問題,另外一種隱含的費用為個數,每個物品的個數費用為1。要求恰好買m張表示要求恰好裝滿,所以初始化不是0,而是...
二維費用的揹包問題
有 n nn 件物品和乙個容量是 v vv 的揹包,揹包能承受的最大重量是 mmm。每件物品只能用一次。體積是 v iv i vi 重量是 m im i mi 價值是 w iw i wi 求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,總重量不超過揹包可承受的最大重量,且價值總和最大。輸出最大...
二維費用的揹包問題
n件物品和乙個容量是 v的揹包,揹包能承受的最大重量是 m。每件物品只能用一次。體積是 vi,重量是 mi,價值是 wi。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,總重量不超過揹包可承受的最大重量,且價值總和最大。輸出最大價值。第一行三個整數,n,v,m,用空格隔開,分別表示物品件數 揹...