poj1017 貪心 思維 好題

2021-06-28 18:22:24 字數 908 閱讀 6928

題意:運輸公司有6種規格的物品各若干件:1*1 , 2*2,3*3 ,4*4,5*5,6*6的,這六種物品都要放在6*6的箱子裡運輸,讓你求出最少用多少個箱子。

解題思路:有兩種方法來做,第一種特別繁瑣,也是最直接的解決方式,那就是根據常識來貪心並模擬,**量很大,另一種和這個貪心乙個思路,實現的時候非常簡便,下面是貪心的大致思路:

6*6的只能用單獨的箱子來放;

5*5的可以塞6個1*1的來放;

4*4的可以塞5個2*2的來放;

3*3的分四種情況:

如果3*3的個數能被4整除則不用插別的,因為6*6恰好可以放4個3*3的;

如果3*3的個數%4剩1,則要用5個2*2的箱子來補;

如果%4剩2,則要用3個2*2的來補,剩下的用1*1的補;

如果%4剩3,要用1個2*2的來補,1*1補剩;

2*2的在上面的已經分配一部分了,如果2*2的還有剩餘,則把剩下的2*2放乙個箱子裡,如果有剩餘還要把多的那個箱子算上;

1*1的則通過上面安置的每個方案中逐個填補空缺,也就是用所有的空間減去被上面5種占去的空間,剩下的空間就是1*1所需要填補的。

如果給的1*1的數量要多於上述,就講剩餘的1*1塞入乙個箱子中,最終還要向上取整,得到最後的結果。

注:這種解決方案中需要向上取整(ceil() 包含在 math.h/cmath),因為有多於的情況要單獨放乙個箱子中。

#include 

#include

#include

using

namespace

std;

int a,b,c,d,e,f,ans,one,two,other[4] = ;

bool input()

void solve()

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 ...

POJ 1017 裝箱問題(貪心)

大意是只有6 6規格的箱子來裝 雖然是描述三維的,但因為高度相同,因此忽略掉 給你若干個從1 1到6 6規格的箱子,求所需最小箱子數。思路 很明顯應該利用貪心,即優先從最大規格的箱子數來考慮,然後因為在裝完較大規格的箱子後,該箱子可以存在剩餘空間,所以仍應該利用,且仍舊優先裝較小規格中較大的箱子。6...