題目描述 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 #include45using
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 全域性陣列建...