裝箱問題(貪心 暴力列舉)

2021-10-04 01:56:35 字數 2038 閱讀 4194

描述

乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1*1,2*2,3*3,4*4,5*5,6*6。

這些產品通常使用乙個6*6*h的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有乙個好的程式幫他們解決這個問題從而節省費用。現在這個程式由你來設計。

格式輸入格式

輸入檔案包括幾行,每一行代表乙個訂單。每個訂單裡的一行包括六個整數,中間用空格隔開,分別為1*1至6*6這六種產品的數量。輸入檔案將以6個0組成的一行結尾。

輸出格式

除了輸入的最後一行6個0以外,輸入檔案裡每一行對應著輸出檔案的一行,每一行輸出乙個整數代表對應的訂單所需的最小包裹數。

樣例輸入樣例

0 0 4 0 0 1

7 5 1 0 0 0

0 0 0 0 0 0

輸出樣例

2

1

限制

時間限制:1000 ms

記憶體限制:65536 kb

我看網上其他人關於這個題的貪心解法,這裡貼一為博主的貪心解法(下面借用了一些圖),基本都是將規律總結出一些公式來ac,但我一開始沒想那麼多,看著這個題的規模不是很大,noip判分模式能得分總比沒有分好,所以直接暴力列舉。

思路:一種費時的笨方法,運用了貪心加列舉,從6*6開始倒序裝(貪心),然後列舉每種情況。

1.當放6*6時,箱子剛好滿:

2.當放5*5時,剩下11個1*1:

.3當放4*4時,剩下20個格仔,可以放5個2*2,或者20個1*1,再或者2*2與1*1的組合。

4.當放3*3時,每當3*3的數量超過4個時,直接放滿一箱,當3*3的數量小於4個時,可組成3*3與2*2與1*1的組合,或者3*3與1*1的組合

5.當放2*2時,先把2*2放滿,然後放1*1;

6.當放1*1時,直接放,滿了加乙個箱。

#include #include #include using namespace std;

int main()

} if (flag == true)

ans=0;

while(1) else if (a[5]>0) else

flag = false;

ans++;

area = 36;

} else if (a[4]>0) else

}flag = false;

ans++;

area=36;

} else if (a[3]>0) else

while (a[1]>0 && area>0)

}flag = false;

ans++;

area=36;

} else if (a[2]>0)

while (a[1]>0 && area>0)

flag = false;

ans++;

area=36;

} else if (a[1]>0)

flag = false;

ans++;

area=36;

}if (flag == true)

break;

} printf ("%d\n", ans);

} return 0;

}

openjudge 貪心 裝箱問題

乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1 1,2 2,3 3,4 4,5 5,6 6。這些產品通常使用乙個 6 6 h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有乙個好的程式...

貪心演算法 裝箱問題

貪心演算法中必須設定乙個貪心準則 來尋求每一步的最優解,但最後往往不是問題的整體最優解。問題 假設有n個物品,其體積為v1,v2,v3,v4.v n,有若干個體積為v的箱子 理論物品的體積應該小於箱子的體積 要求把所有物品全部裝入箱子中,要求開啟的箱子數最少。分析 怎樣合理化分配才能使得開啟的箱子數...

貪心演算法(裝箱問題)

貪心演算法的基本思想是找出整體當中每個小的區域性的最優解,並且將所有的這些區域性最優解合起來形成整體上的乙個最優解。因此能夠使用貪心演算法的問題必須滿足下面的兩個性質 1.整體的最優解可以通過區域性的最優解來求出 2.乙個整體能夠被分為多個區域性,並且這些區域性都能夠求出最優解。3.區域性最優解不一...