首页 > 其他 > 详细

装箱问题

时间:2019-11-11 15:02:24      阅读:84      评论:0      收藏:0      [点我收藏+]

题目链接:

http://bailian.openjudge.cn/practice/1017/

http://noi.openjudge.cn/ch0406/19/

总时间限制: 1000ms 内存限制: 65536kB
描述
一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由你来设计。
输入
输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空格隔开,分别为1*1至6*6这六种产品的数量。输入文件将以6个0组成的一行结尾。
输出
除了输入的最后一行6个0以外,输入文件里每一行对应着输出文件的一行,每一行输出一个整数代表对应的订单所需的最小包裹数。
样例输入
0 0 4 0 0 1 
7 5 1 0 0 0 
0 0 0 0 0 0 
样例输出
2 
1 
来源
Central Europe 1996
 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a,b,c,d,e,f,n;//n表示需要的箱子数
 5     int x,y;//x表示1×1的空位数目;y表示2×2的空位数目 
 6     int u[4]={0,5,3,1};//表示3×3的产品数目分别为4k,4k+1,4k+2,4k+3时,为3×3产品打开的新箱子中剩余2×2的空位数目
 7     
 8     while(scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)!=EOF)
 9     {
10         if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0) break;
11         
12         n=f+e+d+(c+3)/4;  // (c+3)/4之所以要加3是为了使除法计算出来的箱子数目刚好能够装完2×2的产品。或者说是为了对c/4向上取整 
13         y=5*d+u[c%4];
14         if(b>y)
15         {
16             n=n+(b-y+8)/9;//多出来的2×2的产品应该占用的箱子数.加8是为了向上取整 
17         }
18         x=36*n-36*f-25*e-16*d-9*c-4*b;
19         if(a>x)
20             n=n+(a-x+35)/36;//加35是为了向上取整 
21         printf("%d\n",n);
22     } 
23     return 0;
24 }

 

装箱问题

原文:https://www.cnblogs.com/huashanqingzhu/p/11834729.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!