有乙個箱子容量為v(正整數,o≤v≤20000),同時有n個物品(o≤n≤30),每個物品有乙個體積 (正整數)。要求從 n 個物品中,任取若千個裝入箱內,使箱子的剩餘空間為最小。
第一行,乙個整數,表示箱子容量;
第二行,乙個整數,表示有n個物品;
接下來n行,分別表示這n個物品的各自體積。
乙個整數,表示箱子剩餘空間。
和之前一樣,我們從決策入手,首先我們的決策和01揹包一樣,是當前物品是否放入,決策的策略是加入這件物品是否能讓我們箱內的空間變的最小?為了更加清晰的定義出我們的策略,我們定義狀態,該問題中我們的要素應該有兩個,乙個是序列i,還有乙個是物品的體積v,從結論入手我們不難發現,我們需要定義的狀態也應該是v,但是如果我們僅僅把要素v當作狀態本身的話,那麼我們在決策第i個物品是否放入的話,除了箱子剩下的體積已經放不下第i個物品時,其他情況只能的到「放入「這個唯一得結果,這明顯是錯誤的,出現這樣錯誤的原因時決策,是因為沒有考慮到v這個要素(把它當做引數),綜上我們的狀態應該是乙個把i和v當作引數,v當作本質的狀態,我們定義狀態f[i][c]為前i個物品在空間為c時的最大體積,這樣下來我們發現其實和01揹包是完全一樣的問題。
//
// main.cpp
// 裝箱問題
//// created by 張嘉韜 on 16/1/10.
//#include #include using namespace std;
int f[500][200100];
int max(int a,int b)
int main(int argc, const char * argv)
for(int j=1;j<=v;j++)
for(int i=1;i<=n;i++)
for(int i=2;i<=n;i++)
else}}
cout/ for(int i=1;i<=n;i++)
//
// cout/ }
return 0;
}
vijos P1133 裝箱問題
題意 有n個物品,選出k個裝入容積為v的箱子,使空餘體積最小,求最小體積。思路 01揹包問題 注意點 無 以下為ac 評測狀態 accepted 題目p1133 裝箱問題 遞交時間 2014 11 07 12 33 13 語言 c 評測機 vijo 消耗時間 30 ms 消耗記憶體 360 kib ...
Vijos P1133 裝箱問題 01揹包
有乙個箱子容量為v 正整數,o v 20000 同時有n個物品 o n 30 每個物品有乙個體積 正整數 要求從 n 個物品中,任取若千個裝入箱內,使箱子的剩餘空間為最小。第一行,乙個整數,表示箱子容量 第二行,乙個整數,表示有n個物品 接下來n行,分別表示這n個物品的各自體積。乙個整數,表示箱子剩...
P1133 裝箱問題
有乙個箱子容量為v 正整數,o v 20000 同時有n個物品 o n 30 每個物品有乙個體積 正整數 要求從 n 個物品中,任取若千個裝入箱內,使箱子的剩餘空間為最小。第一行,乙個整數,表示箱子容量 第二行,乙個整數,表示有n個物品 接下來n行,分別表示這n個物品的各自體積。乙個整數,表示箱子剩...