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 }
原文地址:https://www.cnblogs.com/siyudemo/p/2989326.html