一、题目大意:

一个工厂生产的产品用正方形的包裹打包,包裹有相同的高度h和1*1, 2*2, 3*3, 4*4, 5*5, 6*6的尺寸。这些产品经常以产品同样的高度h和6*6的尺寸包袱包装起来运送给客户。工厂和客户最关心的就是尽量使用少的包裹来运送客户定的产品以减少费用。一个能计算运送产品所需最少包裹的程序能节约很多钱。你的任务就是编写这个程序。

输入:

输入文件包含若干行订单,每行表示一个订单。一个订单包含六个整数,用空格分开,表示产品尺寸对应的包裹个数,从最小尺寸1*1,到最大尺寸6*6,最后一行六个零表示输入结束。

输出:

输出文件一行对应输入文件的一行。这一行表示对应输入文件行订单所需最小的包裹数。对输入文件最后一行不用处理。

二、吐槽

在没有看到翻译之前,小弟真不知道题目什么意思。星幸亏有这位大哥的翻译啊,谢谢大哥啊,你的英语真好。

三、题解

这道题有用到贪心策略:

  • 对于尺寸为6的包裹很简单,只要所求结果加尺寸为6个数即可。
  • 对于尺寸为5的包裹的的话,1个最多只能填充11个尺寸为1 的包裹,所以所求结果加上5的个数,然后再用尺寸为1的包裹减去填充进尺寸为5的包裹即可。这里要注意尺 寸为1 的包裹数和填充的包裹数的数量不一,所以,在减的时候要减去尺寸为1 的包裹数和需要的最多填充数两者的最小值。
  • 对于尺寸为4的包裹而言呢,即可填充尺寸为2的包裹也可以填充尺寸为1的包裹。这里采用贪心策略,首先先用尺寸为2的包裹填充,再用尺寸为1的包裹填充。这里最麻烦 的就是,2填充了多少,1又填充了多少。所以,专门写一个函数用于解决这个问题。这里是我一直很纠结的地方,后来参考了大神的方法,确实简单高效。
  • 对于尺寸为3的包裹,情况和尺寸为4的差不多,不过它更复杂一点,因为它可以只填充它本身。所以就分为,它自身只有1、2、3的三种情况。
  • 尺寸为2和1的情况相对简单一点。

四、java代码

import java.util.Scanner; 

public class Main {
static int [] a=new int[7];;
public static void deal(int x,int y){
y-=Math.min(a[2],x)*4;
a[2]-=Math.min(a[2],x);
a[1]-=Math.min(a[1],y);
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int i,sum,temp,x = 0,y = 0;
while(cin.hasNext()){
int total=0;
for(i=1;i<=6;i++){
a[i]=cin.nextInt();
total+=a[i];
}
if(total==0)
break;
sum=a[6]+a[5]+a[4];
a[1]-=Math.min(a[1], a[5]*11);
deal(a[4] * 5,a[4] * 20);
sum+=(a[3]+3) / 4;
temp=a[3] % 4;
switch(temp){
case 0: x=0;y=0;break;
case 1: x=5;y=27;break;
case 2: x=3;y=18;break;
case 3: x=1;y=9;break;
}
deal(x,y);
sum+=(a[2]+8) /9;
if(a[2]%9!=0){
y=(9 - a[2] % 9) *4;
}else
y=0;
deal(0,y);
sum+=(a[1]+35) /36;
System.out.println(sum);
}
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Poj 1017 Packets(贪心策略)的更多相关文章

  1. poj 1017 Packets 贪心

    题意:所有货物的高度一样,且其底面积只有六种,分别为1*1 2*2 3*3 4*4 5*5 6*6的,货物的个数依次为p1,p2,p3,p4,p5,p6, 包裹的高度与货物一样,且底面积就为6*6,然 ...

  2. POJ 1017 Packets【贪心】

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

  3. poj 1017 Packets 裸贪心

    Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43189   Accepted: 14550 Descrip ...

  4. poi 1017 Packets 贪心+模拟

    Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 48349   Accepted: 16392 Descrip ...

  5. POJ 1017 Packets(积累)

    [题意简述]:这个是别人的博客,有清晰的题意描写叙述.和解题思路,借助他的想法,能够非常好的解决问题! [分析]:贪心?模拟?见代码 //216K 16Ms #include<iostream& ...

  6. POJ 1O17 Packets [贪心]

    Packets Description A factory produces products packed in square packets of the same height h and of ...

  7. POJ 1017 Packets

    题意:有一些1×1, 2×2, 3×3, 4×4, 5×5, 6×6的货物,每个货物高度为h,把货物打包,每个包裹里可以装6×6×h,问最少几个包裹. 解法:6×6的直接放进去,5×5的空隙可以用1× ...

  8. poj -3614 Sunscreen(贪心 + 优先队列)

    http://poj.org/problem?id=3614 有c头奶牛在沙滩上晒太阳,每头奶牛能忍受的阳光强度有一个最大值(max_spf) 和最小值(min_spf),奶牛有L种防晒霜,每种可以固 ...

  9. poj 2431 Expedition 贪心 优先队列 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=2431 题解 朴素想法就是dfs 经过该点的时候决定是否加油 中间加了一点剪枝 如果加油次数已经比已知最少的加油次数要大或者等于了 那么就剪 ...

随机推荐

  1. sgu 195 New Year Bonus Grant【简单贪心】

    链接: http://acm.sgu.ru/problem.php?contest=0&problem=195 http://acm.hust.edu.cn/vjudge/contest/vi ...

  2. 九度OJ 1202:排序 (排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:19711 解决:6508 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). ...

  3. jqweui tabbar使用示例

    <!DOCTYPE html> <html class="pixel-ratio-1"> <head> <meta http-equiv= ...

  4. 洛谷 P2486 [SDOI2011]染色

    题目描述 输入输出格式 输入格式: 输出格式: 对于每个询问操作,输出一行答案. 输入输出样例 输入样例#1: 6 5 2 2 1 2 1 1 1 2 1 3 2 4 2 5 2 6 Q 3 5 C ...

  5. 【Mybatis】Insert批量操作

    话不多说,直接上代码. <insert id="pesistRT" parameterType="com.test.model.RTSummarizer" ...

  6. 《程序员代码面试指南》第二章 链表问题 删除中间节点和a/b处节点

    题目 例如 1-2-3-4 删除2,1-2-3-4-5 删除3 例如 a=1,b =2 java代码 /** * @Description:删除中间节点和a/b处节点 * @Author: lizho ...

  7. P3338 [ZJOI2014]力(FFT)

    题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...

  8. 第二十三篇、IO多路复用 二

    基于IO多路复用实现socket的连接 下面流程:1.先创建列表,让自己的socket对象传入,然后遍历select第一个参数2.客户端连接,那么客户端socket就传入到了列表里面,3.遍历,接收客 ...

  9. 20165101刘天野 2017-2018-2 《Java程序设计》第2周学习总结

    # 20165101刘天野 2017-2018-2 <Java程序设计>第2周学习总结 教材学习内容总结 基本数据类型 逻辑类型:boolean 整型:byte.short.int.lon ...

  10. pathinfo()的用法

    pathinfo() 返回一个关联数组包含有 path 的信息. 包括以下的数组元素: [dirname] [basename] [extension] 提示和注释 注释:如果不是要求取得所有单元,则 ...