poj1017 Packets

 1 #include<stdio.h>
 2 #include<string.h>
 3 int main()
 4 {
 5      int i,t,n;
 6      int a[7],f[7];
 7      while(1)
 8      {
 9         memset(f,0,sizeof(f));
10          for(n=0,i=1;i<=6;++i){
11              scanf("%d",&a[i]);
12              n+=a[i];
13         }
14         if(!n) break;
15          for(n=0,i=6;i>0;--i){
16             switch(i){
17                 case 6:{
18                     n+=a[i];
19                     break;
20                 }
21                 case 5:{
22                     n+=a[i];
23                     f[1]+=11*a[i];
24                     break;
25                 }
26                 case 4:{
27                     n+=a[i];
28                     f[2]+=5*a[i];
29                     break;
30                 }
31                 case 3:{
32                     n+=a[i]/4;
33                     t=a[i]%4;
34                     if(t){
35                         n++;
36                         switch(t){
37                             case 1:{
38                                 f[2]+=5;
39                                 f[1]+=7;
40                                 break;
41                             }
42                             case 2:{
43                                 f[2]+=3;
44                                 f[1]+=6;
45                                 break;
46                             }
47                             case 3:{
48                                 f[2]++;
49                                 f[1]+=5;
50                                 break;
51                             }
52                         }
53                     }
54                     break;
55                 }    
56                 case 2:{
57                     if(a[i]-f[2]>0){
58                         n+=(a[i]-f[2])/9;
59                         t=(a[i]-f[2])%9;
60                         if(t) n++;
61                         f[1]+=36-4*t;
62                     }
63                     else
64                         f[1]+=(f[2]-a[i])*4;
65                     break;
66                 }
67                 case 1:{
68                     if(a[i]-f[1]>0){
69                         n+=(a[i]-f[1])/36;
70                         if((a[i]-f[1])%36) n++;
71                     }
72                     break;
73                 }
74             }
75         }
76         printf("%d\n",n);
77     }
78     return 0;
79 }

//纯数组模拟,先装最大的!

原文地址:https://www.cnblogs.com/shihuajie/p/2652063.html