P1049 裝箱問題

2021-08-15 09:20:22 字數 821 閱讀 2075

題目內容:

題目描述

有乙個箱子容量為v(正整數,0<=v<=20000),同時有n個物品(0<n<=30,每個物品有乙個體積(正整數)。

要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。

輸入輸出格式

輸入格式:

乙個整數,表示箱子容量

乙個整數,表示有n個物品

接下來n行,分別表示這n 個物品的各自體積

輸出格式:

乙個整數,表示箱子剩餘空間。

樣例:輸入246

83127

97輸出:思路:

非常標準的動態規劃01揹包問題,將它的重量看作它的價值,求剩餘最小量就是能裝的最大量

求n個物品中,任取若干個裝入箱內,總價值最大。

對於每乙個物體,都有兩種狀態:裝 與 不裝

那麼,對於任意重量m的最大價值 dp[m] = max(dp[ m - w[i] ] + w[i],dp[m] )(w為重量(即價值))

其中,dp [ m - w[i] ] 指在裝了物品i後,箱子的剩餘容量能裝的最大重量

dp ( m - w[i] ) + w[i] 指在在裝了物品i後,箱子能裝的最大重量

dp[m]表示當前的價值

max(dp[m],dp[m-w[i]]+w[i]);表示判斷加上物體價值大還是不加物體價值大,保留價值大的那乙個。

見**

#includeusing namespace std;

int dp[200010];//箱子的重量

int w[40];//每件物體的重量

int main()

P1049 裝箱問題

題目描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30,每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 乙個整數,表示箱子容量 乙個整數,表示有n個物品 接下來n行,分別表示這n 個物品的各自體積 輸出格...

P1049 裝箱問題

題目描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30,每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入輸出格式 輸入格式 乙個整數,表示箱子容量 乙個整數,表示有n個物品 接下來n行,分別表示這n 個物品的各自體積 輸出格...

P1049 裝箱問題

有乙個箱子的容量為v,有n個物品,每個物品都有乙個體積,要求在這n個物品中使箱子剩餘的體積最小。2468 31279 70o nm 連續寫了4題關於動態規劃的題目,但毫不例外的都是01揹包,能不能再簡單一點,我也是沒看出有多少改變。跟採藥相比也就少了個每個物品的價值,但物品的體積也可以看作是它的價值...