poj1017 模拟

来源:互联网 发布:ds网络发布会 编辑:程序博客网 时间:2024/06/06 09:03
题意:一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6.  这些产品通常使用一个6*6*h的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。 
输入:输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空 格隔开,分别为 1*1 至6*6 这六种产品的数量。输入文件将以 6个0组成的一行结尾。   
输出:最少包裹数
难度:*

算法:模拟 
1.对f个6*6的产品,需要f个箱子
2.对e个5*5的产品,需要e个箱子,另外还能放11个1*1的产品 
3.对d个4*4的产品,需要d个箱子,另外还能放5个2*2的产品 
4.对c个3*3的产品,需要ceil(c/3.0)个箱子,另外,
  如果 c%3 == 0,箱子完全使用,无剩余
  如果 c%3 == 1,箱子还能放5个2*2的产品
  如果 c%3 == 2,箱子还能放3个2*2的产品
  如果 c%3 == 3,箱子还能放1个2*2的产品
5.对b个2*2的箱子,由3和4可算出能可存放的个数,如果不能完全放下,再计算还需要多少个新的箱子
6.对a个1*1的箱子,使用面积法:总面积为36*n(n为前5步算出的箱子数),已用面积为36*f+25*e+16*d+9*c+4*b,

  用总的面积减去已用面积,可知已用的箱子中还能存放多少个1*1的产品,如果不能完全放下,再计算还需要多少个新的箱子。 


#include<iostream>#include <math.h>using namespace std;int main(){int a,b,c,d,e,f;int m[4] = {0,5,3,1};while (cin >> a >> b >> c >> d >> e >> f){if (a+b+c+d+e+f == 0){break;}int n = 0;n += f;// 6*6n += e;// 5*5n += d;// 4*4n += ceil(double(c/4.0));// 3*3int x = d*5 + m[c%4];// 已选用箱子剩余2*2位置的个数 if (b > x) // 2*2{n += ceil(double(b-x)/9.0);// 还需要多少个新箱子盛放2*2的产品 }int y = 36*n - 36*f - 25*e - 16*d - 9*c - 4*b;// 已选用箱子剩余1*1的个数 if (a > y){n += ceil(double(a-y)/36.0);// 还需要多少个新箱子盛放1*1的产品 }cout << n << endl;}}


0 0
原创粉丝点击