A - 装箱问题
Problem Description
一個工廠生產的產品形狀都是長方體,高度都是h,主要有1*1,2*2,3*3,4*4,5*5,6*6等6種。這些產品在郵寄時被包裝在一個6*6*h的長方體包裹中。由于郵費很貴,工廠希望減小每個訂單的包裹數量以增加他們的利潤。因此他們需要一個好的程序幫他們解決這個問題。你的任務就是設計這個程序。
Input
輸入包括多組測試數據,每一行代表一個訂單。每個訂單里的一行包括六個整數,用空格隔開,從小到大分別為這6種產品的數量。6個0表示文件結束。
Output
針對每個訂單輸出一個整數,占一行,代表對應的訂單所需的最小包裹數。沒有多余的空行。
Sample Input
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0Sample Output
2 1#include <iostream> #include <math.h>using namespace std;int main(int argc, const char * argv[]) {int boxA,boxB,boxC,boxD,boxE,boxF;//不同底面積箱子數量int left2x2,left1x1;int countBox;//使用大箱子數量while(cin>>boxA>>boxB>>boxC>>boxD>>boxE>>boxF){//結束條件if (boxA == 0 && boxB == 0 && boxC == 0 && boxD == 0 && boxE == 0 && boxF == 0){break;}//體積為4、5、6的有一個就需要一個箱子,體積為3的需要boxC / 4個箱子countBox = boxD + boxF + boxE + (boxC + 3) / 4;//剩余的空間我們采取貪心的策略,先放2 * 2的箱子,4 * 4的箱子還剩下boxD * 5個2 * 2的空間left2x2 = boxD * 5;//對于3 * 3底面積的需要分情況討論if (boxC % 4 == 3) //3 * 3的箱子裝完了還剩下3個,只留下了1個2 * 2的空間 {left2x2 += 1;}else if (boxC % 4 == 2) //這種情況下留下了3個2 * 2的空間 {left2x2 += 3;}else if (boxC % 4 == 1) //注意哦,這種情況下最多可以留下5個2 * 2的空間哈 {left2x2 += 5;}if (left2x2 < boxB){countBox += (((boxB - left2x2) + 8) / 9); //2 * 2箱子沒地方的,開新箱子。 }//解決了2 * 2的空間還剩下1 * 1的,總體積減去所有其他箱子的體積,就剩下1 * 1的空間了。left1x1 = 36 * countBox - 36 * boxF - 25 * boxE - 16 * boxD - 9 * boxC - 4 * boxB;if (left1x1 < boxA)//空間不夠,加大箱子 {countBox += (((boxA - left1x1) + 35) / 36);}cout
?
轉載于:https://www.cnblogs.com/yangf428/p/10028520.html
總結
- 上一篇: 洛谷 P3835: 【模板】可持久化平衡
- 下一篇: HDUOJ 1428