切換
舊版
前往
大廳
主題

ZeroJudge - b605: Package 解題心得

Not In My Back Yard | 2019-08-05 21:43:04 | 巴幣 2 | 人氣 223

題目連結:


題目大意:
現在有一些長與寬相等的物品,這些物品有皆等高。物品依照長度分七種:邊長為 1 、 2 、 4 、 8 、 16 、 32 、 64 。

現在給定七個非負整數(皆介於 0 ~ 5000 之間),依序代表以上物品的個數。現在要將它們裝進與它們高度相同的箱子裡。這個箱子也同樣是方的,長度等同於寬度。

求將所有物品裝進箱子裡,所需的最小箱子邊長為何?



範例輸入:
1 0 0 0 0 0 0
1 1 1 1 0 0 0
0 0 0 0 20 0 1
0 0 0 1 20 0 1
-1


範例輸出:
1
12
96
104


解題思維:
以 0 1 1 1 0 0 1 為例,代表邊長 2 、 4 、 8 、64 的物品有各一個,則:

從大的物品開始往下,我們先將邊長 64 的物品視作一個平方單位大小。因為這個範例只有一個邊長 64 的物品,因此我們需要邊長 1 單位的箱子(實則為邊長 64 的箱子)。
且放入此物品後,沒有剩餘任何位置。

而每往下一個更小的物品邁進時(邊長 64 到 32 、 32 到 16 、 ……),現在的箱子之邊長的「單位」需要更新成現在關注的物品,因此箱子的邊長要乘以 2 。同理,上一層剩餘的空間要乘以 4 。

當我們降到邊長 8 的物品的時候,此時箱子的邊長為 8 單位(實際上仍然為邊長 64 的箱子),剩餘空間依然是 0 。因此,我們需要延展我們的箱子之邊長。因為只有一個物品,所以邊長延長至 9 單位,剩餘空間因為新空間放入了此物品而變為 16 個平方單位(也就是還剩可以放入 16 個邊長 8 的物品)。

降到邊長 4 ,箱子為 18 單位長、剩餘空間為 64 平方單位(也就是可以放入 64 個邊長 4 的物品)。放入該物品後,箱子為 18 單位長、剩餘空間為 63 平方單位。

降到邊長 2 ,箱子為 36 單位長、剩餘空間為 252 平方單位。放入一個物品,箱子為 36 單位長、剩餘空間為 251 平方單位。

最後來到了邊長 1 ,箱子為 72 單位長,同時也是題目的長度基準,因此邊長為 72 。沒有該大小的物品。因此 72 即是我們將上列物品皆放入箱子所需的最小邊長。


基本原理就是降階的時候,原先的長度之尺度變大兩倍(箱子邊長 × 2 ),因此面積變大四倍(剩餘空間 × 4 )。將剩餘空間為 0 ,但是還有物品要放入,則擴大箱子的大小。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作