zoukankan      html  css  js  c++  java
  • POJ 1017

    题目链接:http://poj.org/problem?id=1017

    读题用了好久,英语真的没底子可以混了,最后还是搜的题意:

     一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个 
    型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6.  这些产品通常使用一个  6*6*h       

    的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的 
    包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由 
    你来设计。  
        输入数据  
        输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空 
    格隔开,分别为 1*1 至6*6 这六种产品的数量。输入文件将以 6 个0 组成的一行结尾。  
        输出要求  
        除了输入的最后一行6 个0 以外,输入文件里每一行对应着输出文件的一行,每一行输 
    出一个整数代表对应的订单所需的最小包裹数。  

    解题思路:

    因为高度都是h,则无需考虑,只考虑底面积大小就可以。6*6的箱子,对于6*6,5*5,4*4,3*3的,只能放自己或尺寸比自己小的;所以先放大的,再用小的填空,

    //6*6一个,

    //5*5一个+11个1*1

    //4*4一个+5个2*2

    //3*3四个,或3个3*3+1个2*2,或2个3*3+3个2*2,或1个3*3+5个2*2,

     

    提示:这里原本用的math.h中的ceil函数,结果wa了,不知道为什么……,要么自定义,要么加一个数再做除法……

    以后遇到max这类不识别的问题的话,也可以考虑自定义……(一个小白的自我陈述)

    #include<iostream>
    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<math.h>
    using namespace std;
    //6*6一个,5*5一个+11个1*1
    //4*4一个+5个2*2;
    //3*3四个 
    int main()
    {
        int a,b,c,d,e,f,N;//N存放盒子个数
         while(~scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)) 
        {
            if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0)
                break;
            int u[4]={0,5,3,1};
            //3*3的产品数目分别是4的倍数,4的倍数加1,4的倍数加2,加3剩余空间所能存放的2*2的个数
            N=d+e+f+(c+3)/4; //先放只能放自己或比自己小的在一个盒子里
            //然后计算剩余空间可以放多少个2*2
            int y=d*5+u[c%4];
            if(b>y) N+=ceil(b-y+8)/9; 
            //计算1*1的
            int x=N*36-b*4-c*9-d*16-e*25-f*36;
            if(a>x) N+=(a-x+35)/36;
            printf("%d
    ",N);
        }
        return 0;
     } 
  • 相关阅读:
    Java工具类
    集合 -- 嵌套表
    集合--索引表
    第一章
    记录Record
    序列Sequence
    操纵数据库 DML
    表的集合操作
    视图
    索引
  • 原文地址:https://www.cnblogs.com/lyqf/p/8766190.html
Copyright © 2011-2022 走看看