国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ACM簡單計算題-裝箱問題

2019-11-11 07:19:14
字體:
供稿:網(wǎng)友

問題描述

        一個工廠制造的產(chǎn)品形狀都是長方體,它們的高度都是 h,長和寬都相等,一共有六個型號,他們的長寬分別為 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 這些產(chǎn)品通常使用一個 6*6*h 的長方體包裹包裝然后郵寄給客戶。因為郵費很貴,所以工廠要想方設(shè)法的減小每個訂單運送時的包裹數(shù)量。他們很需要有一個好的程序幫他們解決這個問題從而節(jié)省費用。現(xiàn)在這個程序由你來設(shè)計。

輸入數(shù)據(jù)

       輸入文件包括幾行,每一行代表一個訂單。每個訂單里的一行包括六個整數(shù),中間用空格隔開,分別為 1*1 至 6*6 這六種產(chǎn)品的數(shù)量。輸入文件將以 6 個 0 組成的一行結(jié)尾。

輸出要求

       除了輸入的最后一行 6 個 0 以外,輸入文件里每一行對應(yīng)著輸出文件的一行,每一行輸出一個整數(shù)代表對應(yīng)的訂單所需的最小包裹數(shù)。

輸入樣例

0 0 4 0 0 17 5 1 0 0 00 0 0 0 0 0

輸出樣例

21

解題思路

        這個問題描述得比較清楚,我們在這里只解釋一下輸入輸出樣例:共有兩組有效輸入,第一組表示有 4 個 3*3 的產(chǎn)品和一個 6*6 的產(chǎn)品,此時 4 個 3*3 的產(chǎn)品占用一個箱子,另外一個 6*6 的產(chǎn)品占用 1 個箱子,所以箱子數(shù)是 2;第二組表示有 7 個 1*1 的產(chǎn)品, 5 個 2*2的產(chǎn)品和 1 個 3*3 的產(chǎn)品,我們可以把他們統(tǒng)統(tǒng)放在一個箱子中,所以輸出是 1。分析六個型號的產(chǎn)品占用箱子的具體情況如下:        (1.)6*6 的產(chǎn)品每個會占用一個完整的箱子,并且沒有空余空間;        (2.)5*5 的產(chǎn)品每個占用一個新的箱子,并且留下 11 個可以盛放 1*1的產(chǎn)品的空余空間;        (3.)4*4 的產(chǎn)品每個占用一個新的箱子,并且留下 5 個可以盛放 2*2 的產(chǎn)品的空余空間;        (4.)3*3 的產(chǎn)品情況比較復(fù)雜, 首先 3*3 的產(chǎn)品不能放在原來盛有 5*5 或者 4*4 的箱子中, 那么必須為 3*3 的產(chǎn)品另開新的箱子, 新開的箱子數(shù)目等于 3*3 的產(chǎn)品的數(shù)目除以4 向上取整; 同時我們需要討論為 3*3 的產(chǎn)品新開箱子時, 剩余的空間可以盛放多少 2*2 和1*1 的產(chǎn)品(這里如果有空間可以盛放 2*2 的產(chǎn)品,我們就將它計入 2*2 的空余空間,等到2*2 的產(chǎn)品全部裝完,如果還有 2*2 的空間剩余,再將它們轉(zhuǎn)換成 1*1 的剩余空間)。我們可以分情況討論為 3*3 的產(chǎn)品打開的新箱子中剩余的空位,共為四種情況:

                           第一種, 3*3 的產(chǎn)品的數(shù)目正好是 4 的倍數(shù),所以沒有空余空間;

                           第二種, 3*3 的產(chǎn)品數(shù)目是 4 的倍數(shù)加 1,這時還剩 5 個 2*2 的空位和 7 個 1*1 的空位;

                           第三種, 3*3 的產(chǎn)品數(shù)目是 4 的倍數(shù)加 2,這時還剩 3 個 2*2 的空位和 6 個 1*1 的空位;

                           第四種, 3*3 的產(chǎn)品數(shù)目是 4 的倍數(shù)加 3,這時還剩 1 個 2*2 的空位和 5 個 1*1 的空位;

       (5.)處理完 3*3 的產(chǎn)品,就可以比較一下剩余的 2*2的空位和 2*2 產(chǎn)品的數(shù)目,如果產(chǎn)品數(shù)目多,就將 2*2 的空位全部填滿,再為 2*2 的產(chǎn)品打開新箱子,同時計算新箱子中 1*1 的空位,如果剩余空位多,就將 2*2 的產(chǎn)品全部填入 2*2的空位,再將剩余的 2*2 的空位轉(zhuǎn)換成 1*1 的空位;       (6.)最后處理 1*1 的產(chǎn)品,比較一下 1*1的空位與 1*1 的產(chǎn)品數(shù)目,如果空位多,將 1*1 的產(chǎn)品全部填入空位,否則,先將 1*1 的空位填滿,然后再為 1*1 的產(chǎn)品打開新的箱子。

理不太清楚的大家在草稿紙上畫一下就清楚了。

參考程序

#include <iostream>using namespace std;int main(){	int N,a,b,c,d,e,f,y,x; 	int u[4]={0,5,3,1}; 	//數(shù)組u表示上述3*3中對應(yīng)的剩余2*2空位個數(shù)的四種情況  	while(true){	 	cin>>a>>b>>c>>d>>e>>f;	 	if(!a && !b && !c && !d && !e && !f){	 		break;	 	}	 	N = f+e+d+(c+3)/4;	 	//這里有一個小技巧(c+3)/4 正好等于 c 除以 4 向上取整的結(jié)果,下同	 	y = 5*d + u[c%4];	 	if(b > y){		 	//2*2需新開箱 	 		N += (b-y+8)/9;	 	}	 	//計算剩余箱子的空間,總的減去占用的 	 	x = 36*N-36*f-25*e-16*d-9*c-4*b;	 	if(a > x){	 		//1*1需新開箱	 		N += (a-x+35)/36;	 	}	 	cout<<N<<endl;	 }	return 0;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉林市| 边坝县| 尉犁县| 彭阳县| 舟曲县| 新乡县| 治县。| 鱼台县| 齐齐哈尔市| 温泉县| 长乐市| 凭祥市| 靖西县| 綦江县| 威海市| 漯河市| 东乌珠穆沁旗| 新田县| 绥宁县| 克东县| 米脂县| 分宜县| 怀柔区| 五华县| 富顺县| 东乌珠穆沁旗| 墨脱县| 深泽县| 玛沁县| 宝坻区| 黔西| 宜兰县| 纳雍县| 双柏县| 桐梓县| 怀宁县| 阿克苏市| 泸定县| 黄陵县| 彩票| 琼海市|