Poj 1017 Packets(贪心策略)
一、题目大意:
一个工厂生产的产品用正方形的包裹打包,包裹有相同的高度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(贪心策略)的更多相关文章
- poj 1017 Packets 贪心
题意:所有货物的高度一样,且其底面积只有六种,分别为1*1 2*2 3*3 4*4 5*5 6*6的,货物的个数依次为p1,p2,p3,p4,p5,p6, 包裹的高度与货物一样,且底面积就为6*6,然 ...
- POJ 1017 Packets【贪心】
POJ 1017 题意: 一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 这些产品通常 ...
- poj 1017 Packets 裸贪心
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 43189 Accepted: 14550 Descrip ...
- poi 1017 Packets 贪心+模拟
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 48349 Accepted: 16392 Descrip ...
- POJ 1017 Packets(积累)
[题意简述]:这个是别人的博客,有清晰的题意描写叙述.和解题思路,借助他的想法,能够非常好的解决问题! [分析]:贪心?模拟?见代码 //216K 16Ms #include<iostream& ...
- POJ 1O17 Packets [贪心]
Packets Description A factory produces products packed in square packets of the same height h and of ...
- POJ 1017 Packets
题意:有一些1×1, 2×2, 3×3, 4×4, 5×5, 6×6的货物,每个货物高度为h,把货物打包,每个包裹里可以装6×6×h,问最少几个包裹. 解法:6×6的直接放进去,5×5的空隙可以用1× ...
- poj -3614 Sunscreen(贪心 + 优先队列)
http://poj.org/problem?id=3614 有c头奶牛在沙滩上晒太阳,每头奶牛能忍受的阳光强度有一个最大值(max_spf) 和最小值(min_spf),奶牛有L种防晒霜,每种可以固 ...
- poj 2431 Expedition 贪心 优先队列 题解《挑战程序设计竞赛》
地址 http://poj.org/problem?id=2431 题解 朴素想法就是dfs 经过该点的时候决定是否加油 中间加了一点剪枝 如果加油次数已经比已知最少的加油次数要大或者等于了 那么就剪 ...
随机推荐
- 电路分析二-------基尔霍夫定律KCL和KVL
1.先了解几个名词 (1)支路----一个二端原件视为一条支路--图中6个二端原件所以有6条支路. (2)结点----两条或以上的支路连接的点. d,e可以看做一个结点. (3).回路----- (4 ...
- Symfony 上传图片教程
介绍:我使用的Bundle:"vich/uploader-bundle": "^1.4"; "liip/imagine-bundle": & ...
- SAP 物料 移动类型
[转自 http://blog.sina.com.cn/s/blog_494f9a6b0102edf7.html] SAP 物料 移动类型 (2013-12-03 10:15:01) 转载▼ 分类 ...
- SUBMIT 用法
[转自http://lz357502668.blog.163.com/blog/static/16496743201241195817597/] 1.最普通的用法 *Code used to exec ...
- Java之线程池(二)
关于线程和线程池的学习,我们可以从以下几个方面入手: 第一,什么是线程,线程和进程的区别是什么 第二,线程中的基本概念,线程的生命周期 第三,单线程和多线程 第四,线程池的原理解析 第五,常见的几种线 ...
- 几款Java常用基础工具库
通用工具类(字符串.时间格式化.BeanUtils.IO) 1. commons-lang3库 1.1. org.apache.commons.lang3.StringUtils类 日常代码中,我们经 ...
- 一个例子看懂所有nodejs的官方网络demo
今天看群里有人用AI技术写了个五子棋,正好用的socket.io,本身我自己很久没看nodejs了,再加上Tcp/IP的知识一直很弱,我就去官网看了下net.socket 发现之前以为懂的一个官方例子 ...
- 剑指offer——求1+2+...+n
方法一.通过在类的构造函数中执行加的过程. #include <iostream> using namespace std; class Base { public: Base(){n++ ...
- MATLAB卷积运算(conv、conv2)解释
来源:https://www.cnblogs.com/hyb221512/p/9276621.html 1.conv(向量卷积运算) 所谓两个向量卷积,说白了就是多项式乘法.比如:p=[1 2 3], ...
- Codeforces 180C Letter:dp
题目链接:http://codeforces.com/problemset/problem/180/C 题意: 给你一个字符串s,长度为n. 让你将这个字符串变成“前面一段都是大写字母,后面一段都是小 ...