poj1017-装箱问题-贪心模拟
1 #include<stdio.h> 2 int main() 3 { 4 int n,a,b,c,d,e,f,x,y; 5 int u[4]={0,5,3,1}; 6 while(1) 7 { 8 scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f); 9 if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0) 10 break; 11 /* 12 统计单独占一个打包的个数 13 6,5,4都是一个占一个包,3是每4个占一个包 14 */ 15 n=d+e+f+(c+3)/4; 16 /* 17 统计填补4*4和3*3需要的2*2的个数 18 u是一个技巧数组,用于记录3*3如果是0,1,2,3个时所需要的2*2的个数 19 */ 20 y=5*d+u[c%4]; 21 /* 22 消去用于填补的2*2 23 */ 24 if(b>y) 25 n+=(b-y+8)/9; 26 /* 27 统计用于填补的1*1的个数 28 这里使用了1*1面积为1的特性,直接嵌入需要的地方 29 */ 30 x=36*n-36*f-25*e-16*d-9*c-4*b; 31 if(a>x) 32 n+=(a-x+35)/36; 33 printf("%d\n",n); 34 } 35 return 0; 36 }