轉載於http://blog.csdn.net/c20190413/article/details/77396357###;
裝箱問題 Description 一個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1*1, 2*2, 3*3, 4*4, 5*5, 6*6。這些產品通常使用一個 6*6*h 的長方體包裹封裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有一個好的程式幫他們解決這個問題從而節省費用。現在這個程式由你來設計。 Input 輸入檔案包括幾行,每一行代表一個訂單。每個訂單裡的一行包括六個整數,中間用空格隔開,分別為1*1至6*6這六種產品的數量。輸入檔案將以6個0組成的一行結尾。 Output 除了輸入的最後一行6個0以外,輸入檔案裡每一行對應著輸出檔案的一行,每一行輸出一個整數代表對應的訂單所需的最小包裹數。 Sample Input
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0
Sample Output
2 1
Source Central Europe 1996
思路解析
代碼實現 [cpp] view plain copy #include<bits/stdc++.h> using namespace std; int p1,p2,p3,p4,p5,p6,sum; main() { while(scanf("%d%d%d%d%d%d",&p1,&p2,&p3,&p4,&p5,&p6)&&p1+p2+p3+p4+p5+p6) { sum=0; sum=p6+p5+p4; p1-=min(p1,p5*11); if(p2<p4*5) p1-=min(p1,(p4*5-p2)*4); p2-=min(p2,p4*5); p5=p4=0; sum+=ceil(p3/4.0); p3%=4; if(p3==1) { if(p2<5) p1-=min(p1,(5-p2)*4); p1-=min(p1,7); p2-=min(p2,5); } if(p3==2) { if(p2<3) p1-=min(p1,(3-p2)*4); p1-=min(p1,6); p2-=min(p2,3); } if(p3==3) { if(!p2) p1-=min(p1,4); p1-=min(p1,5); p2-=min(p2,1); } sum+=ceil(p2/9.0); p2%=9; if(p2) p1-=min(p1,4*(9-p2)); sum+=ceil(p1/36.0); printf("%d\n",sum);