裝箱問題也叫揹包問題,簡單來說,就是把小貨物往大箱子裡裝,要如何才能裝得多。個人常見的經歷就是「裝冰箱」,很有趣的現象就是常常感覺冰箱再也裝不下了,但是經過一翻折騰之後又神奇的裝下了。
從企業運作角度來看就是盡量讓每個容器(倉庫、車輛、貨櫃、船等)裝的盡量多,可以節約企業的費用。通常,裝載率85%
左右,使用裝箱優化方法後,可以達到90~95%
左右。海爾做過乙個海運裝箱的專案,節約了大量運費。日本的汽車企業也非常重視裝箱問題,他們海運過來的汽車零件箱內幾乎每個角落都會被填滿,而且經常改進其裝箱方案。
裝箱問題是典型的np
難問題,一般使用啟發式演算法——貪婪演算法、蟻群演算法、禁忌搜尋、遺傳演算法nf(next fit)
近似演算法,ff(first fit)
近似演算法、ffd
(first fit decreasing
)近似演算法、bf(best fit)
、bfd(best fit deceasing)等。
裝箱問題可以分為一維、二維、三維、多維等。
一維裝箱問題是最常見的,只考慮乙個因素,比如重量、體積、長度等。問題描述:裝箱問題可簡述如下:設有編號為1
,2, …, n
的n種物品,體積分別為v
1, v
2, …,vn
。將這n
種物品裝到容量都為v
的若干箱子裡。約定這n
種物品的體積均不超過v
,即對於1≤i≤n
,有0<vi
≤v。不同的裝箱方案所需要的箱子數目可能不同。裝箱問題要求使裝盡這n
種物品的箱子數要少。
二維裝箱問題考慮兩個因素——給定一張矩形的紙(布料、皮革),要求從這張紙上剪出給定的大小不一的形狀,求一種剪法使得剪出的廢料的面積總和最小。常見問題包括堆場中考慮長和寬進行各功能區域劃分、停車場區位劃分、包裝材料裁切時考慮怎樣裁切使得材料浪費最少、服裝布料裁切、皮鞋製作中的皮革裁切等。
三維裝箱問題考慮三個因素——一般指長、寬、高。裝車、裝船、裝貨櫃等要考慮這三個維度都不能超。
多維裝箱要考慮多個因素——比如既包括體積因素長、寬、高,又包括重量。
問題A 裝箱問題
思路 思路 根據演算法筆記上01揹包問題的一維形式改編,就僅僅是把每件物品的價值改為1,再未做其他修改,後來發現不行 const int maxn 1001 int dp maxn int w maxn int main for int i 0 i參照別人的答案,進行的思考 首先,狀態轉移方程 dp...
Codeup 問題 A 裝箱問題
問題描述 有乙個箱子的容量為v v為正整數,且滿足0 v 20000 同時有n件物品 0的體積值為正整數。要求從n件物品中,選取若干裝入箱內,使箱子的剩餘空間最小。輸入 1行整數,第1個數表示箱子的容量,第2個數表示有n件物品,後面n個數分別表示這n件 物品各自的體積。輸出 1個整數,表示箱子剩餘空...
練習 問題 A 裝箱問題
問題描述 有乙個箱子的容量為v v為正整數,且滿足0 v 20000 同時有n件物品 0的體積值為正整數。要求從n件物品中,選取若干裝入箱內,使箱子的剩餘空間最小。輸入 1行整數,第1個數表示箱子的容量,第2個數表示有n件物品,後面n個數分別表示這n件 物品各自的體積。輸出 1個整數,表示箱子剩餘空...