二維費用的揹包問題,小白也可以看懂,哦耶

2021-10-10 19:24:37 字數 1029 閱讀 1752

問題描述:

揹包的容量是v,能承受的最大的重量是m

有n個物品,v, m, w陣列中分別存放著每個物品的體積,重量,價值

求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,物品的總重不超過揹包能承受的最大重量,且總價值最大

思路分析:

方案一:

dp陣列的含義是:揹包在一定的體積和重量下,可以獲得的最大價值

假設現在要裝第i件物品,那麼dp[i - 1]儲存的就是裝這件物品之前的所有物品可以獲得的最大價值,通過裝第i件物品,實現dp[i]的更新,更新為包括第i件物品可以獲得的最大價值。所以下面的**對應的是dp[i - 1]

在體積為j,重量為k的條件下,裝入第i件物品,體積得騰出v[i],重量也得騰出m[i],這樣才可以裝下第i件物品,如果可以裝下,那麼揹包的價值在 dp[i - 1][j - v[i]][k - m[i]] 的條件下增加了w[i],和之前的進行比較,選出最優解

dp[i]

[j][k]

= math.

max(dp[i -1]

[j][k]

, dp[i -1]

[j - v[i]

][k - m[i]

]+ w[i]

);

優化版:

和之前的一樣,咱們需要的資料只有dp[i - 1],如果從後往前遍歷就不會破壞原來的dp[i - 1]資料

dp[j]

[k]= math.

max(dp[j]

[k], dp[j - v[i]

][k - m[i]

]+ w[i]

);

**:
public

class

main

else}}

}return dp[n]

[v][m];}

//優化

public

inttwo_dimension2()

else}}

}}}

二維費用的揹包問題

問題 二維費用的揹包問題是指 對於每件物品,具有兩種不同的費用 選擇這件物品必須同時付出這兩種代價 對於每種代價都有乙個可付出的最大值 揹包容量 問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價1和代價2,第i件物品所需的兩種代價分別為a i 和b i 兩種代價可付出的最大值 兩種揹包容量 ...

二維費用的揹包問題

題目 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 求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,總重量不超過揹包可承受的最大重量,且價值總和最大。輸出最大...