UVA311:Packets(贪心)

题目大意:
有1*1,2*2,3*3,...六种小包裹,往6*6的箱子里装,给出六种小包裹各自的数量,求出最少用的箱子的个数。
贪心,思路还是比较简单的,先从大的开始往小的装。
6*6的包裹,每个单独装一个箱子;
5*5的包裹,可以和11个1*1的搭配;
4*4的包裹,可以喝5个2*2的搭配,如果2*2的不够,则补1*1的个数;
.
.
.
以此类推(注意3*3的有四种搭配方案)。
这里可以每次优先用2*2的去填,如果2*2的为负了,再用1*1的补正,这样可以简化过程。
最后如果1*1的数量为负,则不用处理(原因很简单,在此不赘余),若为正,则继续装。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <map>
#include <queue>
typedef long long  ll;
#define inf 0x3f3f3f3f
using namespace std;
int a,b,c,d,e,f;
ll sum;
int main()
{
    while(scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f)!=EOF)
    {
        sum=0;
        if(a==0&&b==0&&c==0&&d==0&&e==0&&f==0) break;
        sum=sum+f+e;
        a=a-11*e;
        sum=sum+d;
        if(b-5*d>=0)
            b=b-5*d;
        else
        {
            a=a-4*(5*d-b);
            b=0;
        }
        if(c%4==0)
            sum=sum+c/4;
        else if(c!=0)
        {
            sum=sum+c/4+1;
            int te=c%4;
            if(te==1)
            {
                if(b>=5)
                {
                    b-=5;
                    a-=7;
                }
                else if(b==4)
                {
                    b-=4;
                    a-=11;
                }
                else if(b==3)
                {
                    b-=3;
                    a-=15;
                }
                else if(b==2)
                {
                    b-=2;
                    a-=19;
                }
                else if(b==1)
                {
                    b-=1;
                    a-=23;
                }
                else
                {
                    a-=27;
                }
            }
            else if(te==2)
            {
                if(b>=3)
                {
                    b-=3;
                    a-=6;
                }
                else if(b==2)
                {
                    b-=2;
                    a-=10;
                }
                else if(b==1)
                {
                    b-=1;
                    a-=14;
                }
                else
                {
                    a-=18;
                }
            }
            else if(te==3)
            {
                if(b>=1)
                {
                    b-=1;
                    a-=5;
                }
                else
                {
                    a-=9;
                }
            }
        }
        if(b>0)
        {
            while(b>=9)
            {
                sum+=1;
                b-=9;
            }
            if(b>0) sum+=1;
            a=a-(9-(b%9))*4;
            if(a>=0&&a%36==0)
                sum+=a/36;
            else if(a>0)
                sum+=a/36+1;
        }
        else
        {
            if(a>=0&&a%36==0)
                sum+=a/36;
            else if(a>0)
                sum+=a/36+1;
        }
        printf("%lld\n",sum);

    }
    return 0;
}
时间: 2024-10-05 05:31:22

UVA311:Packets(贪心)的相关文章

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

A - Packets 贪心

A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are always delivered to customers in the square parcels of the same height h as the products have and of the size

poj 1017 Packets 裸贪心

Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43189   Accepted: 14550 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are alway

POJ1017 Packets 【贪心】

Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44505   Accepted: 15032 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are alway

POJ 1017 Packets【贪心】

POJ 1017 题意: 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6.  这些产品通常使用一个  6*6*h的长方体包裹包装然后邮寄给客户.因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量.他们很需要有一个好的程序帮他们解决这个问题从而节省费用.现在这个程序由你来设计.输入数据输入文件包括几行,每一行代表一个订单.每个订单里的一行包括六个整数,中间用空格隔开,分别为 1

贪心 —— POJ 1017 Packets

对应POJ题目:点击打开链接 Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 46584   Accepted: 15752 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro

【贪心】POJ1017:Packets

Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are always delivered to customers in the square parcels of the same height h as the products have and

贪心/poj 1017 Packets

1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 int main() 6 { 7 int a1,a2,a3,a4,a5,a6; 8 scanf("%d%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5,&a6); 9 while ((a1+a2+a3+a4+a5+a6)!=0) 10 { 11 int ans=a6+a5

uva--311+贪心

题意: 货物和箱子是等高的,然后货物的尺寸有1×1,2×2.....6×6六种,箱子的尺寸统一是6*6的.给定6种货物每种的数量,然后求将它们全部装箱所需要的最小箱子数. 思路: 显然要想箱子数最小,就要尽量把每个箱子都装满,那么我们可以每个箱子都选择先装大的,然后再填充小大(因为装了大的可以填充小的,而装了小的确不一定能再装进大的了). 具体的:每个6*6的货物肯定要一个箱子. 每个5×5的货物可以和11个1×1的货物装一个箱 每个4×4的货物可以和5个2×2的装一个箱 3×3货物的情况比较复