Greedy:Packets(POJ 1017)
题目大意:就是一个工厂制造的产品都是正方形的,有1*1,2*2,3*3,4*4,5*5,6*6,高度都是h,现在要包装这些物品,只能用6*6*h的包装去装,问你怎么装才能使箱子打到最小?
这一题其实很简单,装箱子问题一般都是贪婪算法,这一题也不例外,那么这一又要怎么贪心呢?其实可以这样,我们可以看到,如果我们装了6,5,4这三个尺寸的物品,那么这个一个箱子肯定只能最大装这三个物品一个,6尺寸箱子没有空余位置,5尺寸的箱子还有11个空位,可以装11个1尺寸的物品,4尺寸的箱子可以再装5个2尺寸的物品。
但是3尺寸的物品就是有点复杂了,因为我们想尽量让三尺寸的物品装在一个箱子里面(贪婪嘛),我们知道一个箱子最多只能转4个三尺寸物品,如果三尺寸物品刚好为4的倍数,那么我们就可以得到箱子的个数了,如果剩余一个3尺寸物品,那么其中3尺寸箱子中的一个箱子还可以装5个2尺寸物品,如果剩余两个,则有3尺寸物品的箱子还可以装3个2尺寸物品,如果剩余3个,则那个3尺寸箱子还可以装1一个2尺寸物品。
我们只用把2尺寸的物品装好了,那么接下来的事情就简单了,前面我们在3,4尺寸的物品的时候解决了2尺寸物品的问题的一部分,最后剩下的2尺寸物品则有多少就放多少就可以了,1尺寸的填充剩下的,不够再放
这一题可以用模拟,不过太慢了,直接用数学去解就很快了
#include <iostream>
#include <functional>
#include <algorithm> using namespace std; static int stuff[];
static int left_3[] = { , , , }; void Search(void); int main(void)
{
while ()
{
for (int i = ; i <= ; i++)
scanf("%d", &stuff[i]);
if (stuff[] == && stuff[] ==
&& stuff[] == && stuff[] ==
&& stuff[] == && stuff[] == )
break;//6个物品为0,直接再见
Search();
}
return ;
} void Search(void)
{
int ans = , left_2, left_1;
ans += stuff[] + stuff[] + stuff[] + (stuff[] + ) / ;//654肯定是有多少个加多少个,stuff[3] + 3向上取整 left_2 = stuff[] * + left_3[stuff[] % ];//如果这些箱子都填满了2*2的箱子 if (left_2 < stuff[])
ans += (stuff[] - left_2 + ) / ; left_1 = * ans - * stuff[] - * stuff[] - * stuff[]
- * stuff[] - * stuff[];//在除了1*1的物品填满以后,剩余位置,向上取整 if (left_1 < stuff[])
ans += (stuff[] - left_1 + ) / ;//直接计算多出来1的大小,向上取整 printf("%d\n", ans);
}
Greedy:Packets(POJ 1017)的更多相关文章
- 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 ...
- Poj 1017 / OpenJudge 1017 Packets/装箱问题
1.链接地址: http://poj.org/problem?id=1017 http://bailian.openjudge.cn/practice/1017 2.题目: 总时间限制: 1000ms ...
- POJ 1017:Packets
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47513 Accepted: 16099 Descrip ...
- 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 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(贪心策略)
一.题目大意: 一个工厂生产的产品用正方形的包裹打包,包裹有相同的高度h和1*1, 2*2, 3*3, 4*4, 5*5, 6*6的尺寸.这些产品经常以产品同样的高度h和6*6的尺寸包袱包装起来运送给 ...
- POJ 1017 Packets(积累)
[题意简述]:这个是别人的博客,有清晰的题意描写叙述.和解题思路,借助他的想法,能够非常好的解决问题! [分析]:贪心?模拟?见代码 //216K 16Ms #include<iostream& ...
- POJ - 1017 贪心训练
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 59725 Accepted: 20273 Descrip ...
随机推荐
- Android如何让真机显示debug log的调试信息
真机默认是不开启debug log调试功能的,以前我一直用模拟器,模拟器默认是开启debug log调试功能的,那么如何让真机开启呢? 我用华为Ascend P6为例: 1.进入拨号界面,输入*#*# ...
- Myeclipse报PermGen space异常的问题
最好用的方法: 1)在myeclipse中windos——>preference——>Myeclipse——>servers——>Tomcat——>JDK(Optiona ...
- Oracle 调度程序(scheduler)摘自一位大神
在11g中,Oracle提供了一个新建的Scheduler特性,帮助将作业实现自动化.它还可以帮助你控制资源的利用与并可以将数据库中的作业按优先顺序执行.传统的dbms_jobs的一个限制是它只能调度 ...
- 常用sql,在做项目时用mysqlWorkBeach里面自动生成的
-- 修改表中的字段的长度ALTER TABLE `sfkbbs`.`sfk_father_module` CHANGE ) NULL DEFAULT NULL COMMENT '父板块名字' ; 在 ...
- OracleOraDb10g_home1TNSListener无法启动
1:“本地计算机上的OracleOraDb10g_home1TNSListener服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止.” 解决办法:动态ip,服务 OracleOraDb10 ...
- mysql 高级查询
高级查询:1.连接查询select * from Info,Nation #这是两个表名,中间用逗号隔开形成笛卡尔积select * from Info,Nation where Info.natio ...
- DALSA Coreco - 图像处理软件(Sapera LT )
http://blog.csdn.net/linglongyouzhi/article/details/3505845 概述 Sapera LT 是一套用于图像采集.显示和控制的独立于硬件以外的 C ...
- php绝对路径与相对路径之间关系的的深入研究
php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层../表示当前层.假如现在a/b/c/s.php要调用根目录下的 ...
- WPF PopupNonTopmost重写
之前做WPF遇到问题,在网上找到的一个类 public class PopupNonTopmost : System.Windows.Controls.Primitives.Popup { publi ...
- html5摇一摇[转]
写在前面 年底了,有些公司会出一个摇奖的活动,今天在家没事就搜了一下这方面的资料. 原文地址:http://www.cnblogs.com/waitingbar/p/4682215.html 测试 效 ...