一、题目大意:

一个工厂生产的产品用正方形的包裹打包,包裹有相同的高度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. Convex optimization 凸优化

    zh.wikipedia.org/wiki/凸優化 以下问题都是凸优化问题,或可以通过改变变量而转化为凸优化问题:[5] 最小二乘 线性规划 线性约束的二次规划 半正定规划 Convex functi ...

  2. 去掉标题栏/ActionBar后点击menu键时应用崩溃

    MainActivity 继承了 ActionBarActivity后,想要去掉标题栏(ActionBar),在程序中加上requestWindowFeature(Window.FEATURE_NO_ ...

  3. 免费好用的Diff和Merge工具大总结

    总结:比较下来:diffmerge和P4merge最好用,kdiff比较专业些,支持自动merge. 一 csdiff 下载:http://www.componentsoftware.com/Prod ...

  4. Linux系统BTC挖矿傻瓜教程

    [Linux系统BTC/比特币矿池挖矿方案一]cgminer矿池挖矿程序(Linux系统 比特币(BTC) 矿池挖矿/采矿/造币)cgminer矿池挖矿程序[查看这里有没有最新版]http://ck. ...

  5. iOS 开发规范

    公司来了大牛  是绝好的学习机会 今天分享了我们一个代码规范 比如UITableViewCell 1.首先根据这个cell 需要的数据源 建一个数据model ,只针对于 该cell  好处:数据独立 ...

  6. iOS base64编码 MD5 加密

    //创建一个Base64编码的NSString对象 //字符串 转二进制 NSData *nsdata = [@"iOS Developer Tips encoded in Base64&q ...

  7. Datanode启动问题 FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool <registering>

    -- ::, INFO org.apache.hadoop.hdfs.server.datanode.DataNode: supergroup = supergroup -- ::, INFO org ...

  8. Python OOP(3) staticmethod和classmethod统计实例

    staticmethod 统计实例 #!python2 #-*- coding:utf-8 -*- class c1: amount_instance=0 def __init__(self): c1 ...

  9. DevOps means no Ops!

    DevOps means no Ops! 只单纯地搞网络的话或许你可以搞得非常好,并且获得不错的薪资,不过,5年后~10年后~,那时候随便一个人经过简单的学习就能通过Web界面或者专用的工具就能搞定一 ...

  10. 【Flask】ORM模型创建及数据库映射

    1. 用 declarative_base 根据 engine 创建一个ORM基类.2. 用 Base 类作为基类来写自己的ORM类.要定义 __tablename__ 类属性,来指定这个模型映射到数 ...