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/archive/2013/03/29/2989326.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值