http://poj.org/problem?id=1017

有1*1 2*2...6*6的物品 要装在 6*6的parcel中 问最少用多少个parcel

一直没有找到贪心的策略

问题应该出现在 总是在想怎么放入parcel中 使得最节省空间

其实这种角度是很麻烦的 情况太多 很难描述清楚

但是其实 放一类型物品 得到的结果是非常具体的

-->>>即从要放的东西的角度出发

放 一个6*6 物品 会占用一个parce

放 一个5*5 物品 会占用一个parce 并且空出11个1*1的空位

放 一个4*4 物品 会占用一个parce 并且空出5个2*2的空位(可以转化为1*1的空位)

放3*3

:放一个 空出 5个2*2的空位 和7个1*1的空位

:放两个 空出 3个2*2的空位 和6个1*1的空位

:放三个 空出 1个2*2的空位 和5个1*1的空位

1*1 和 2*2 的物品作用是用来填补空位的

如果空位被填满 但是物品还未放完  就要再开一个新的parcel

2*2的物品放完后 将所有2*2的空位 变成 1*1的空位

 #include <iostream>
#include <string.h>
#include <stdio.h> using namespace std;
//从 六种要装的物品考虑 装每一种物品会空出的空格的情况
int num[];
int main()
{
freopen("in.txt", "r", stdin);
int temp = ;
int parcel = ;
int space[];
while (~scanf("%d", &num[]))
{
temp = ;
temp |= num[];
memset(space, , sizeof(space));
parcel = ;
for (int i = ; i < ; i++)
{
scanf("%d", &num[i]);
temp |= num[i];
}
if (!temp) break;
parcel = num[] + num[] + num[];
space[] = num[] * ;//先解决 6*6,5*5,4*4 的包装盒
space[] = num[] * ;
//解决3*3的盒子
int p3 = , remain = ;
remain = num[] % ;
p3 = remain ? (num[]/)+ : num[]/;//如果还有剩余就多开一个盒子
parcel += p3;
switch(remain)//剩下多少个3*3的物品
{
case : space[] += ; space[] += ;break;
case : space[] += ; space[] += ;break;
case : space[] += ; space[] += ;break;
}
//然后解决 2*2 的盒子
remain = min(num[], space[]);
num[] -= remain;
space[] -= remain;
space[] += space[] * ;
if (num[])
{
remain = num[] % ;
if (remain)//如果还有剩余就多开一个盒子
{
parcel += num[] / + ;
space[] += *(-remain);
}
else
{
parcel += num[] / ;
}
}
//解决1*1
num[] -= min(num[], space[]);
if (num[])
{
remain = num[] % ;
parcel += remain ? num[] / + : num[] / ;//如果还有剩余就多开一个盒子 后面两个逻辑不严密 没有考虑清楚而出错
}
printf("%d\n", parcel);
}
return ;
}

POJ 1017 Packet的更多相关文章

  1. POJ 1017 Packets【贪心】

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

  2. POJ 1017

    http://poj.org/problem?id=1017 题意就是有6种规格的物品,给你一些不同规格的物品,要求你装在盒子里,盒子是固定尺寸的也就是6*6,而物品有1*1,2*2,3*3,4*4, ...

  3. Poj 1017 / OpenJudge 1017 Packets/装箱问题

    1.链接地址: http://poj.org/problem?id=1017 http://bailian.openjudge.cn/practice/1017 2.题目: 总时间限制: 1000ms ...

  4. POJ - 1017 贪心训练

    Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 59725   Accepted: 20273 Descrip ...

  5. poj 1017 Packets 裸贪心

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

  6. Greedy:Packets(POJ 1017)

    装箱问题1.0 题目大意:就是一个工厂制造的产品都是正方形的,有1*1,2*2,3*3,4*4,5*5,6*6,高度都是h,现在要包装这些物品,只能用6*6*h的包装去装,问你怎么装才能使箱子打到最小 ...

  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 1017 Packets 贪心

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

  9. 【递归与分治】 poj 1017

    递归与分治经典例题    要点在于对3*3箱子的讨论 #include <iostream> #include <cstdio> using namespace std; in ...

随机推荐

  1. apt-get的一些坑

    apt-get update:更新安装列表apt-get upgrade:升级软件apt-get install software_name :安装软件apt-get --purge remove  ...

  2. [BZOJ1045][HAOI2008]糖果传递 数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1045 我们假设每一个小朋友的代价为$x[i]$,每一次都从前面一个小朋友那里拿,这种贪心跟 ...

  3. 洛谷P2762 太空飞行计划问题(最大权闭合图)

    题意 有$m$个实验,$n$中器材,每个实验需要使用一些器材 每个实验有收入,每个器材有花费 最大化收入 - 花费 Sol 最大权闭合图的经典应用 从$S$向每个实验连流量为该实验收入的边 从每个器材 ...

  4. 在vscode中显示空格和tab符号

    转自:https://blog.csdn.net/bmzk123/article/details/86501706 使用python时最烦人的就是代码对齐,而且tab和空格还不一样,为了便于对其,希望 ...

  5. ios项目中引用其他开源项目

    1. 将开源项目的.xcodeproj拖入项目frameworks 2. Build Phases下 Links Binary With Libraries 引入.a文件.Target Depende ...

  6. c++正则表达式模板库GRETA的使用

    GRETA是微软研究院的一位前员工开发并开源的一个C++正则表达式库,兼容perl正则语法 官方介绍:“A fast, flexible, perl-compliant regular express ...

  7. UVA 11419 SAM I AM (最小点覆盖,匈牙利算法)

    题意:给一个r*c的矩阵,某些格子中可能有一些怪物,可以在一行或一列防止一枚大炮,大炮会扫光整行/列的怪,问最少需要多少炮?输出炮的位置. 思路: 先每行和列都放一个炮,把炮当成点,把怪当成边,一边连 ...

  8. 在同一页面显示多个JavaScript统计图表

    最近我接到一个开发任务,要求就"售后服务客户满意度调查问卷表"里客户填写的反馈答案做一个统计. 问题的例子如下: 您最后一次是何时购买了我们的产品? 服务人员服务态度是否友好.工作 ...

  9. PE基础1

    PE文件概述 文件格式 .png ..mp4..gif..dll等等,这些文件都具有不同格式 不能随意修改这些文件,否则将无法打开 PE文件(可执行文件) 学习PE文件目标 掌握PE文件就掌握wino ...

  10. Python3基础教程(十八)—— 测试

    编写测试检验应用程序所有不同的功能.每一个测试集中在一个关注点上验证结果是不是期望的.定期执行测试确保应用程序按预期的工作.当测试覆盖很大的时候,通过运行测试你就有自信确保修改点和新增点不会影响应用程 ...