Vijos P1133 裝箱問題

2021-07-09 12:31:27 字數 1027 閱讀 7565

有乙個箱子容量為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

//

// 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個物品的各自體積。乙個整數,表示箱子剩...