poj1017

Packets

Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%lld & %llu

Submit Status Practice POJ 1017

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 of the size 6*6. Because of the expenses it is the interest of the factory as well as of the customer to minimize the number of parcels necessary to deliver the ordered products from the factory to the customer. A good program solving the problem of finding the minimal number of parcels necessary to deliver the given products according to an order would save a lot of money. You are asked to make such a program.

Input

The input file consists of several lines specifying orders. Each line specifies one order. Orders are described by six integers separated by one space representing successively the number of packets of individual size from the smallest size 1*1 to the biggest size 6*6. The end of the input file is indicated by the line containing six zeros.

Output

The output file contains one line for each line in the input file. This line contains the minimal number of parcels into which the order from the corresponding line of the input file can be packed. There is no line in the output file corresponding to the last ``null‘‘ line of the input file.

Sample Input

0 0 4 0 0 1

7 5 1 0 0 0

0 0 0 0 0 0

Sample Output

2

1

题意:

有六种高都为h的不同底面积大小(底面分别为1、2、3、4、5、6边长的正方形)的产品各若干个,现在将它们用底面为6x6,高为h的盒子全部装起来,问最少需要多少盒子。

输入:

若干组输入数据,每组数据6个整数一排,从左至右依次表示底面边长为1、2、3、4、5、6的产品的个数。

输出:

每组数据,输出最少的盒子数。

分析:

使用贪心的思想。由于高全是相同的,我们只需要考虑底面的情况。我们从大至小依次选完每一种尺寸的产品。首先,6x6的产品每个皆占用一个盒子。然后,5x5的产品,每个都需要新增一个盒子。5x5的产品可以与11个1x1的产品共同占用一个盒子。4x4的产品,每个都需要新增加一个盒子。4x4的盒子既可以与5个及以下的2x2个产品共占一盒,如果此时盒子空间还有剩余,则用1x1的产品尽量填满。3x3的产品,4个可以刚好占满一个盒子,如果3x3产品的个数不被4整除,那么剩余的空间应先用2x2的产品尽量去填充,然后再用1x1的产品去填充。此时,我们已经使用完了3x3的产品了。2x2的产品9个可以刚好填满一个盒子,如果空间有剩余则用1x1的产品去填充。

 1 #include<iostream>
 2 using namespace std;
 3 int main(void){
 4     int s1,s2,s3,s4,s5,s6;//6种size的盒子数量
 5     while(cin >> s1 >> s2 >> s3 >> s4 >> s5 >> s6 && (s1 + s2 + s3 + s4 + s5 + s6)){
 6         int BoxNum = 0;   //放进所有盒子所需的最少箱子数
 7         BoxNum += s6;             //6*6的盒子,每个都刚好独占一个箱子
 8         BoxNum += s5;             //5*5的盒子,放进箱子后,每个箱子余下的空间只能放11个1*1的盒子
 9         s1 = max(0,s1 - s5 * 11);     //把1*1的盒子尽可能地放进已放有一个5*5盒子的箱子
10         BoxNum += s4;             //4*4的盒子,放进箱子后,每个箱子余下的空间为5个2*2的盒子空间
11 //先把所有2*2的盒子尽可能地放进这些空间
12         if(s2 >= s4 * 5) s2 -= s4 * 5;  //若2*2的盒子数比空间多
13 //则消去已放进空间的部分
14         else{                 //若2*2的盒子数比空间少则先把所有2*2的盒子放进这些空间
15             s1 = max(0,s1 - 4 * (s4 * 5 - s2));   //再用1*1的盒子填充本应放2*2盒子的空间
16             s2 = 0;               //一个2*2空间可放4个1*1盒子
17         }
18         BoxNum += (s3 + 3) / 4;       //每4个3*3的盒子完全独占一个箱子
19         s3 %= 4;            //3*3的盒子不足4个时,都放入一个箱子,剩余空间先放2*2,再放1*1
20         if(s3){//当箱子放了i个3*3盒子,剩下的空间最多放j个2*2盒子
21             if(s2 >= 7 - 2 * s3){       //其中i={1,2,3} ; j={5,3,1}  由此可得到条件的关系式
22                 s2 -= 7 - 2 * s3;
23                 s1 = max(0,s1 - (8 - s3));  //当箱子放了i个3*3盒子,并尽可能多地放了个2*2盒子后
24             }                         //剩下的空间最多放j个1*1盒子,其中i={1,2,3} ; j={7,6,5}
25             else{             //但当2*2的盒子数不足时,尽可能把1*1盒子放入剩余空间//一个箱子最多放36个1*1,一个3*3盒子空间最多放9个1*1,一个2*2盒子空间最多放4个1*1
26                 s1 = max(0,s1 - (36 - 9 * s3 - 4 * s2));    //由此很容易推出剩余空间能放多少个1*1
27                 s2 = 0;
28             }
29         }
30
31         BoxNum += (s2 + 8) / 9;//每9个2*2的盒子完全独占一个箱子
32         s2 %= 9; //2*2的盒子不足9个时,都放入一个箱子,剩余空间全放1*1
33         if(s2) s1 = max(0,s1 - (36 - 4 * s2));
34         BoxNum += (s1 + 35) / 36;     //每36个1*1的盒子完全独占一个箱子
35         cout << BoxNum << endl;
36     }
37     return 0;
38 }

时间: 2024-10-14 04:09:11

poj1017的相关文章

(一般)POJ-1017 装载问题

题目大意: 一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户.因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量BoxNum. 题目链接:点击打开链接 分析:这题h实际并无卵用,可以忽略.由于这题的尺寸规模比较小,所以我们可以定性地考虑,用a[i]表示i*i的个数.先考虑4*4, 5*5, 6*6这3种,每一个都需要

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

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

poj1017 Packets

参考了http://www.cnblogs.com/mycapple/archive/2012/08/23/2652070.html 思路: 贪心. 实现: 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 int main() 6 { 7 int b1, b2, b3, b4, b5, b6; //不同大小的木块个数 8 int nTotal = 0; //最少需要的箱子数目 9 int c1

poj-1017 Packets (贪心)

http://poj.org/problem?id=1017 工厂生产高度都为h,长和宽分别是1×1 2×2 3×3 4×4 5×5 6×6的6种规格的方形物品,交给顾客的时候需要包装,包装盒长宽高都为6×6,高度为h,为了减少成本,问至少需要多少包装盒才能把全部物品装进去.每一行有6个数,分别表示1×1  2×2 3×3 4×4 5×5 6×6的物品有多少个. 从大到小处理,先放6×6的放一个就需要一个盒子,在放5×5的,每一个也需要一个盒子,但是还可以放11个1×1的物品,放4×4的物品的时

【贪心】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

POJ1017 Illusive Chase

题意:有一个m*n大小的房间与房间的描述,1代表该点不可通过或到达,0代表该点能通过或到达. 然后给你若干个行动的描述,每一步按先后顺序排列,包含的参数有移动的最短距离,最长距离与方向.问房间有几个可能的起点,使其能够走完全部行动. 思路:枚举每一个点,按命令顺序跑dfs,注意命令2 4 U的时候要判断移动1的时候 Sample Input 2 6 6 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1

关于ACM与OJ

初级: 一.基本算法: (1)枚举. (poj1018,poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295,poj3239) (6.1)模拟法.(poj1008,poj1068,poj2632,poj1573,poj2993,poj2996,poj3087) (6.2)模拟法(高精度算法)(poj1001,poj1503,poj2389,poj2602,poj3982,21位大数的水仙

【转载】POJ水题大集合

POJ水题大集合 poj1000:A+B problempoj1002:电话上按键对应着数字.现在给n个电话,求排序.相同的归一类poj1003:求最小的n让1+1/2+1/3+...+1/n大于给的一个实数poj1004:求一堆实数的平均数poj1005:由坐标 (0,0) 开始,以半圆为形状每年侵蚀50m^2,问(0,0)开始到(x,y)结束需要多长时间poj1006:三个周期是常数.现在给三个周期出现高峰的时候,问下一次出现高峰是什么时候poj1007:求字符串排序poj1008:一种日历