裝箱問題 簡單01揹包問題)

2022-08-21 15:00:19 字數 812 閱讀 4484

題目描述 description

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

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

輸入描述 input description

乙個整數v,表示箱子容量

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

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

輸出描述 output description

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

樣例輸入 sample input

樣例輸出 sample output

思路:  

揹包型動態規劃,相當於揹包容量和揹包中物品價值二者相等的一般揹包問題。(貌似也稱為偽揹包問題) 

對於每乙個物品i,都存在放入箱子和不放入箱子兩種情況。當前箱子容量剩餘j時,若i放入,則為dp[j-a[i]]+a[i]); 

若i不放入,則為dp[i];因此,狀態轉移方程為:dp[j] = max(dp[j], dp[j-a[i]]+a[i])       

**如下:

1 #include2 #include3 #include4

5using

namespace

std;

6const

int maxn = 20005;7

int f[maxn],dp[maxn];//

分別用於存放每個物品大小以及最終結果

8int

n,v;

9int

main()

10

裝箱問題(01揹包問題)

有乙個箱子容量為 v,同時有 n 個物品,每個物品有乙個體積 正整數 要求 n 個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入格式 第一行是乙個整數 v,表示箱子容量。第二行是乙個整數 n,表示物品數。接下來 n 行,每行乙個正整數 不超過10000 分別表示這 n 個物品的各自體積。輸...

裝箱問題 01揹包

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

揹包問題 01揹包 P1049 裝箱問題

p1049 裝箱問題 f i j 把前面 i 件物品放進容量為 j 的揹包當中所獲得的最大價值 現在有 n 件物品,揹包容積為 v 那麼列出狀態轉移方程 f i j max f i 1 j f i 1 j v i w i j v i f i 1 j j v i 0 i 0 or j 0 全域性陣列建...