信息学奥赛一本通(1226:装箱问题)
1226:裝箱問題
時(shí)間限制: 1000 ms ??? ??? 內(nèi)存限制: 65536 KB
提交數(shù): 5923 ??? 通過數(shù): 3064
【題目描述】
一個(gè)工廠制造的產(chǎn)品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個(gè)型號(hào),他們的長寬分別為1×1,2×2,3×3,4×4,5×5,6×6。這些產(chǎn)品通常使用一個(gè)6×6×h的長方體包裹包裝然后郵寄給客戶。因?yàn)猷]費(fèi)很貴,所以工廠要想方設(shè)法的減小每個(gè)訂單運(yùn)送時(shí)的包裹數(shù)量。他們很需要有一個(gè)好的程序幫他們解決這個(gè)問題從而節(jié)省費(fèi)用。現(xiàn)在這個(gè)程序由你來設(shè)計(jì)。
【輸入】
輸入包括幾行,每一行代表一個(gè)訂單。每個(gè)訂單里的一行包括六個(gè)整數(shù),中間用空格隔開,分別為1×1至6×6這六種產(chǎn)品的數(shù)量。輸入將以6個(gè)0組成的一行結(jié)尾。
【輸出】
除了輸入的最后一行6個(gè)0以外,輸入文件里每一行對應(yīng)著輸出文件的一行,每一行輸出一個(gè)整數(shù)代表對應(yīng)的訂單所需的最小包裹數(shù)。
【輸入樣例】
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0【輸出樣例】
2 1【分析】
6?6的自己占一個(gè)包裹;
5?5的可以占一個(gè)包裹,剩下的空由1?1的來補(bǔ);
4?4的可以和2?2的搭配裝箱,如圖,塞入一個(gè)4?4的后還能塞5個(gè)2?2的。如果沒有5個(gè)2?2的,就用1?1的來補(bǔ);
3?3的可以每四個(gè)打一捆,正好占用一個(gè)箱子。沒有4個(gè)3?3,就用2?2的 和?1?1的 來補(bǔ),優(yōu)先塞2?2的;
2?2的和1?1的優(yōu)先拿去補(bǔ)別的產(chǎn)品,補(bǔ)滿了之后如果還有再用。
【參考代碼】
#include<stdio.h> int main() {int a,b,c,d,e,f; //六種產(chǎn)品的數(shù)量 int cnt; //最小包裹數(shù)int a_gap,b_gap; //剩余的空間數(shù),a_gap,1*1空間,b_gap,2*2空間 while(scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f) && a||b||c||d||e||f){cnt=0;a_gap=0;b_gap=0;cnt+=f; //6*6的自己占一個(gè)包裹,包裹計(jì)數(shù)+f cnt+=e; //5*5的自己可以占一個(gè)包裹,包裹計(jì)數(shù)+e,每個(gè)剩余11個(gè)1*1,共e個(gè)a_gap+=11*e;cnt+=d; //4*4的自己也可以占一個(gè)包裹,包裹計(jì)數(shù)+d,每個(gè)剩余5個(gè)2*2,共計(jì)d個(gè) b_gap+=5*d;cnt+=c/4; //3*3的裝箱 if(c%4!=0){cnt++;switch(c%4){case 1:b_gap+=5;a_gap+=7;break;case 2:b_gap+=3;a_gap+=6;break;case 3:b_gap+=1;a_gap+=5;default:break;}}if(b_gap>=b) //2*2的裝箱 {a_gap+=(b_gap-b)*2;}else{b-=b_gap;cnt+=b/9;if(b%9!=0){cnt++;a_gap+=36-4*b%9;}}if(a_gap<a) //1*1的裝箱 {a-=a_gap;cnt+=a/36;if(a%36!=0)cnt++;}printf("%d\n",cnt);}return 0; }http://ybt.ssoier.cn:8088/problem_show.php?pid=1226
總結(jié)
以上是生活随笔為你收集整理的信息学奥赛一本通(1226:装箱问题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(2059:【例3.11
- 下一篇: 信息学奥赛一本通 2066:【例2.3】