UVa 311 - Packets
题目大意:有1X1,2X2 ... 5X5,6X6六种类型的物品,把他们装进6X6的盒子里,求使用的最少盒子数。
贪心吧,其实一看就知道思路了,算是常识吧,装物品时通常都是先装大的,再在其余空间放小的。一点一点敲代码就好了。
1 #include <cstdio> 2 3 int main() 4 { 5 #ifdef LOCAL 6 freopen("in", "r", stdin); 7 #endif 8 int a[7]; 9 while (scanf("%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6]) != EOF) 10 { 11 if (!a[1] && !a[2] && !a[3] && !a[4] && !a[5] && !a[6]) break; 12 int ans = 0; 13 if (a[6] > 0) 14 { 15 ans += a[6]; 16 } 17 if (a[5] > 0) 18 { 19 ans += a[5]; 20 a[1] -= a[5] * 11; 21 } 22 if (a[4] > 0) 23 { 24 ans += a[4]; 25 a[2] -= a[4] * 5; 26 if (a[2] < 0) 27 { 28 a[1] -= -4 * a[2]; 29 a[2] = 0; 30 } 31 } 32 if (a[3] > 0) 33 { 34 ans += (a[3]+3) / 4; 35 int t = a[3] % 4; 36 switch(t) 37 { 38 case 1: 39 a[2] -= 5; 40 a[1] -= 7; 41 break; 42 case 2: 43 a[2] -= 3; 44 a[1] -= 6; 45 break; 46 case 3: 47 a[2] -= 1; 48 a[1] -= 5; 49 break; 50 } 51 } 52 if (a[2] > 0) 53 { 54 ans += (a[2]+8) / 9; 55 int t = a[2] % 9 * 4; 56 a[1] -= 36 - t; 57 } 58 if (a[1] > 0) ans += (a[1]+35) / 36; 59 printf("%d\n", ans); 60 } 61 return 0; 62 }
代码可以再精简,不过精简之后思路就不如这个直接了,其实是我想偷懒啦,哈哈