zoukankan      html  css  js  c++  java
  • 装箱问题

    装箱问题

    链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1226


    时间限制: 1000 ms         内存限制: 65536 KB

    【题目描述】

    一个工厂制造的产品形状都是长方体,它们的高度都是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
    题解:尽量填满
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int a[7];
    int main()
    {
    
        while(1)
        {
            int flag=0,ans=0;
            memset(a,0,sizeof(a));
            for(int i=1;i<=6;i++)
            {
                cin>>a[i];
                if(a[i])flag=1;
            }
            if(!flag)break;
            ans+=a[6]+a[5]+a[4]+ceill(1.0*a[3]/4);
            a[1]-=11*a[5];
            a[2]-=5*a[4];
            a[3]%=4;
            switch(a[3])
            {
                case 1:a[2]-=5;a[1]-=7;break;
                case 2:a[2]-=3;a[1]-=6;break;
                case 3:a[2]-=1;a[1]-=5;break;
                
            }
            if(a[2]<0&&a[1]>0)a[1]=a[1]+a[2]*4;
            if(a[2]>0)
            {
                ans+=a[2]/9;
                if(a[2]%=9)
                {
                    ans++;a[1]-=(36-a[2]*4);
                }
                
            }
            if(a[1]>0)ans+=ceill(1.0*a[1]/36);
            cout<<ans<<endl;
        }
    }
     
  • 相关阅读:
    [转]优秀的程序员不会觉得累成狗是一种荣耀
    .NET读写Excel工具Spire.XlS使用(DataExport )
    WPF之Binding深入探讨
    第一个WPF应用程序
    Visio作图
    唯一的重复元素
    Strange Problem O(∩_∩)O~
    数据库知识点①
    HDU 2825 Wireless Password
    POJ 1625 Censored!
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7709750.html
Copyright © 2011-2022 走看看