2011-08-17 09:17:33Morris
c110. Packets
c110. Packets
內容 :
有一間工廠生產的東西, 被包裝在相同高度 h 的正方形容器內, 但其面積大小分別有:1*1, 2*2, 3*3, 4*4, 5*5, 6*6等六種尺寸。這些產品總是用高度為h,面積為6*6的箱子打包後寄給客戶。因為成本關係,當然希望將客戶所訂購的產品放在最少的箱子裡寄出。請你寫 一個程式找出寄送這些產品最少需要多少個箱子,這可以使工廠節省下不少錢。
輸入說明
:
每組測試資料一列(就是一份訂單),含有6個整數。分別代表1*1到6*6產品的數目。若此6個整數均為0代表輸入結束。
輸出說明
:
對每一組測試資料,輸出寄送這些產品最少需要多少個箱子。
範例輸入 :
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 3 79 96 94 30 18 14 53 17 12 98 76 54 83 44 47 42 80 3 15 26 13 29 42 40 41 61 36 90 54 66 0 0 0 0 0 0
範例輸出 :
2 1 3 86 231 137 115 219
提示
:
* Luck 貓翻譯
出處
:
ACM 311
作法 : Greedy
很明顯地,
5*5 剩餘的空間分配給 1*1
4*4 剩餘的空間分配給 2*2, 1*1
3*3 剩餘的空間分配給 2*2, 1*1
...
/**********************************************************************************/
/* Problem: c110 "Packets" from ACM 311 */
/* Language: C */
/* Result: AC (4ms, 214KB) on ZeroJudge */
/* Author: morris1028 at 2011-08-17 08:48:25 */
/**********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
main() {
int t1, t2, t3, t4, t5, t6;
while(scanf("%d %d %d %d %d %d", &t1, &t2, &t3, &t4, &t5, &t6) == 6) {
if(t1+t2+t3+t4+t5+t6 == 0) break;
int Ans = t6, tmp, tmp2;
Ans += t5;
t1 -= t5*11; if(t1 < 0) t1 = 0;
Ans += t4;
tmp = t4*20;
if(t2 >= t4*5) tmp = 0, t2 -= t4*5;
else {
tmp -= t2*4, t2 = 0;
if(t1 >= tmp) t1 -= tmp, tmp = 0;
else tmp -= t1, t1 = 0;
}
Ans += (t3/4), t3 %= 4;
if(t3) {
Ans++;
tmp = 36-t3*9, tmp2 = (3-t3)*2+1;
if(t2 >= tmp2) t2 -= tmp2, tmp -= tmp2*4;
else tmp -= t2*4, t2 = 0;
if(t1 >= tmp) t1 -= tmp, tmp -= t1;
else tmp -= t1, t1 = 0;
}
Ans += (t2/9), t2 %= 9;
if(t2) {
Ans++;
tmp = 36-t2*4;
if(t1 >= tmp) t1 -= tmp, tmp -= t1;
else tmp -= t1, t1 = 0;
}
Ans += t1/36 + (t1%36!=0);
printf("%d\n", Ans);
}
return 0;
}
神秘
2011-11-24 10:13:39
還有
if(t2 >= t4*5) tmp = 0, t2 -= t4*5;
上面這個是等於下面這個嗎
if(t2 >= t4*5)
{ tmp = 0;
t2 -= t4*5; }
版主回應
Yes !
2011-11-27 07:28:41
神秘
2011-11-24 10:11:58
t1%36 != 0 是指說, 如果不整除, 則需要一個新的來放置這些剩餘的 2011-11-27 07:28:06
想請問最後幾行的
Ans += t1/36 + (t1%36!=0);
這個運算式是甚麼意思?
(t1%36!=0)這邊不大懂
版主回應
t1/36 是指說 有幾個可以完全放滿t1%36 != 0 是指說, 如果不整除, 則需要一個新的來放置這些剩餘的 2011-11-27 07:28:06
後來想通是(t1%36!=0)
這樣應該就會變成0或1
因為好像只有C可以這樣
java沒有