zoukankan      html  css  js  c++  java
  • poj1017

    一、题意:有底面积为1*1,2*2,...,6*6高为h的物品若干,求用最少的包装盒包装好这些物品,其中包装盒的大小固定为底面积6*6,高为h

    二、思路:贪心。先放大的,然后用小的尽量去凑满这个包装盒,从6到1类推。我用的是比较暴力的方法,每一种情况都考虑出来,然后模拟。

    三、代码:

    #include"iostream"
    #include"stdio.h"
    #include"math.h"
    using namespace std;
    
    int num[7];
    
    int Solve()
    {
        int res=num[5];
        res+=num[4];
        num[0]-=num[4]*11;
        res+=num[3];
        if(num[1]<num[3]*5)
        {
            num[0]-=(20*num[3]-4*num[1]);
        }
        num[1]-=num[3]*5;
        res+=num[2]/4;
        int numLeave=num[2]%4;
        if(numLeave>0) res++;
        switch(numLeave)
        {
        case 1:
            if(num[1]<5)
            {
                if(num[1]>0)
                {
                    num[0]-=(27-num[1]*4);
                    num[1]=0;
                }
                else
                    num[0]-=27;
    
            }
            else
            {
                num[1]-=5;
                num[0]-=7;
            }
            break;
        case 2:
            if(num[1]<3)
            {
                if(num[1]>0)
                {
                    num[1]=0;
                    num[0]-=(18-num[1]*4);
                }
                else
                    num[0]-=18;
            }
            else
            {
                num[1]-=3;
                num[0]-=6;
            }
            break;
        case 3:
            if(num[1]<1)
            {
                num[0]-=9;
            }
            else
            {
                num[1]-=1;
                num[0]-=5;
            }
            break;
        default:
            break;
        }
        if(num[1]>0)
        {
            res+=num[1]/9;
            if(num[1]%9>0)
            {
                res++;
                num[0]-=(36-4*(num[1]%9));
            }
        }
        if(num[0]>0)
        {
            res+=ceil(num[0]/36.0);
        }
        return res;
    }
    
    int main()
    {
        while(true)
        {
            int sum=0;
            for(int i=0;i<6;i++)
            {
                cin>>num[i];
                sum+=num[i];
            }
            if(!sum) break;
            cout<<Solve()<<endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    闭包的一个经典例子
    手机归属地查询API
    安卓模拟器导入通讯录
    使用RazorGenerator实现项目模块分离
    .met mvc 一种判断是否已登录的方式
    stl 空间配置器理解
    STL 生成全排列
    KMP算法理解
    解决八皇后问题,递归与非递归方式两种
    获取第K大的数
  • 原文地址:https://www.cnblogs.com/acm-jing/p/9833172.html
Copyright © 2011-2022 走看看