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 }
View Code

  代码可以再精简,不过精简之后思路就不如这个直接了,其实是我想偷懒啦,哈哈

posted @ 2013-07-31 21:44  xiaobaibuhei  阅读(133)  评论(0编辑  收藏  举报