POJ 1017 裝箱問題(貪心)

2021-09-03 02:15:11 字數 1037 閱讀 4157

大意是只有6*6規格的箱子來裝(雖然是描述三維的,但因為高度相同,因此忽略掉),給你若干個從1*1到6*6規格的箱子,求所需最小箱子數。

思路:很明顯應該利用貪心,即優先從最大規格的箱子數來考慮,然後因為在裝完較大規格的箱子後,該箱子可以存在剩餘空間,所以仍應該利用,且仍舊優先裝較小規格中較大的箱子。6規格的箱子只能裝乙個且空間全占滿,無剩餘;5規格的箱子裝乙個,且還可以裝11個1*1規格的箱子;4*4的裝乙個後可以最多裝從5個2*2規格到20個1*1規格的箱子。

關於3*3規格箱子的處理,乙個箱子可以裝4到1個該規格箱子,但剩下的空間應該我們分情況討論。在紙上畫一下可得知當該箱子分別裝4,3,2,1個3*3規格後,剩餘空間最多可以裝0,1,3,5個2*2規格的箱子。

剩下的2*2和1*1箱子就首先放進前面各較大規格箱子空間的剩餘,不夠的話再用新箱子。

**如下:

#includeusing namespace std;

int main()

sum = f + d + e + (c + 3) / 4;

y = d * 5;//因為裝規格為5的箱子還能最多裝5個規格為2的箱子

//判斷規格為3的箱子數

if (c % 4 == 3)

else if (c % 4 == 2)

else if (c % 4 == 1)

//如果1*1和2*2的仍沒有裝完

if (y < b)

x = 36 * sum - 36 * f - 25 * e - 16 * d - 9 * c - 4 * b;

if (x < a)

cout << sum << endl;

} return 0;

}

另外這道題因為需要將箱子都裝進,所以在計算數量是要上取整,因此我們可以用比如當x/y時,將原式變為(x+y-1)/y即可。

除此之外,在最後還應該注意1*1規格箱子與其剩餘空間的計算問題。

POJ 1017 貪心模擬

因為4 4,5 5,6 6的必須單獨放,所以先開闢這三個的盒子,然後往裡面新增1 1和2 2的 對於5 5的只能填1 1的,乙個已經塞了5 5的盒子可以填11個1 1的格仔 對於4 4的,先填2 2的,再填1 1的 然後再為3 3的開闢新盒子,每四個可以放乙個盒子,不足四個的再新開闢乙個,然後往裡面...

貪心 模擬 poj 1017

題目大意 有1 1,2 2,3 3,4 4,5 5,6 6的產品若干個,問最少需要用多少個6 6的包裝盒把所有的產品都裝好。解題思路一 顯然6 6,5 5,4 4的產品每次只能放乙個,且放完後只能放1 1的產品。對於3 3的格仔,設定陣列lim i j 表示放了i個j j的產品後最多還能放多少個2 ...

poj1017 貪心 思維 好題

題意 運輸公司有6種規格的物品各若干件 1 1 2 2,3 3 4 4,5 5,6 6的,這六種物品都要放在6 6的箱子裡運輸,讓你求出最少用多少個箱子。解題思路 有兩種方法來做,第一種特別繁瑣,也是最直接的解決方式,那就是根據常識來貪心並模擬,量很大,另一種和這個貪心乙個思路,實現的時候非常簡便,...