http://poj.org/problem?id=1017 (题目链接)

题意

  一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的箱子数量BoxNum。

Solution

  一开始我写了个100+行的程序,还没写完就弃疗了,感觉情况太多了。。。然后看了看题解,别人60行就搞完了我靠。。。

  嗯,看起来我的姿势还是不正确啊。

代码

//Memory Time
//248K 32MS #include<iostream>
using namespace std; int max(int a,int b)
{
return a>b?a:b;
} int main(void)
{
int s1,s2,s3,s4,s5,s6; //6种size的盒子数量
while(cin>>s1>>s2>>s3>>s4>>s5>>s6 && (s1+s2+s3+s4+s5+s6))
{
int BoxNum=0; //放进所有盒子所需的最少箱子数 BoxNum+=s6; //6*6的盒子,每个都刚好独占一个箱子 BoxNum+=s5; //5*5的盒子,放进箱子后,每个箱子余下的空间只能放11个1*1的盒子
s1=max(0,s1-s5*11); //把1*1的盒子尽可能地放进已放有一个5*5盒子的箱子 BoxNum+=s4; //4*4的盒子,放进箱子后,每个箱子余下的空间为5个2*2的盒子空间
//先把所有2*2的盒子尽可能地放进这些空间
if(s2>=s4*5) //若2*2的盒子数比空间多
s2-=s4*5; //则消去已放进空间的部分
else //若2*2的盒子数比空间少
{ //则先把所有2*2的盒子放进这些空间
s1=max(0,s1-4*(s4*5-s2)); //再用1*1的盒子填充本应放2*2盒子的空间
s2=0; //一个2*2空间可放4个1*1盒子
} BoxNum+=(s3+3)/4; //每4个3*3的盒子完全独占一个箱子
s3%=4; //3*3的盒子不足4个时,都放入一个箱子,剩余空间先放2*2,再放1*1
if(s3)
{ //当箱子放了i个3*3盒子,剩下的空间最多放j个2*2盒子
if(s2>=7-2*s3) //其中i={1,2,3} ; j={5,3,1} 由此可得到条件的关系式
{
s2-=7-2*s3;
s1=max(0,s1-(8-s3)); //当箱子放了i个3*3盒子,并尽可能多地放了个2*2盒子后
} //剩下的空间最多放j个1*1盒子,其中i={1,2,3} ; j={7,6,5}
else //但当2*2的盒子数不足时,尽可能把1*1盒子放入剩余空间
{ //一个箱子最多放36个1*1,一个3*3盒子空间最多放9个1*1,一个2*2盒子空间最多放4个1*1
s1=max(0,s1-(36-9*s3-4*s2)); //由此很容易推出剩余空间能放多少个1*1
s2=0;
}
} BoxNum+=(s2+8)/9; //每9个2*2的盒子完全独占一个箱子
s2%=9; //2*2的盒子不足9个时,都放入一个箱子,剩余空间全放1*1
if(s2)
s1=max(0,s1-(36-4*s2)); BoxNum+=(s1+35)/36; //每36个1*1的盒子完全独占一个箱子 cout<<BoxNum<<endl;
}
return 0;
}

转自:http://blog.csdn.net/lyy289065406/article/details/6674366

【poj1017】 Packets的更多相关文章

  1. 【Poj1017】Packets

    http://poj.org/problem?id=1017 艰难啊 弄了很久咧 拍了几十万组,以后拍要多组数据 Solution 从大wangxiaofang 从大往小放,有空余的从大往小填 注意细 ...

  2. 【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) A】Packets

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 多重背包的二进制优化. 就是将数量x分成接近log2x份 然后这log2x份能组合成1..x内的所有数字. 从而将多重背包转化成01 ...

  3. 【驱动】USB驱动·入门

    [驱动]USB驱动·入门 Preface USB是目前最流行的系统总线之一.随着计算机周围硬件的不断扩展,各种设备使用不同的总线接口,导致计算机外部总线种类繁多,管理困难.USB总线正是因此而诞生的. ...

  4. 【方法】如何限定IP访问Oracle数据库

    [方法]如何限定IP访问Oracle数据库 1.1  BLOG文档结构图 1.2  前言部分 1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知 ...

  5. 【OS】NMON的简介和使用

    [OS]NMON的简介和使用 目前NMON已开源,以sourceforge为根据地,网址是http://nmon.sourceforge.net. 1. 目的 本文介绍操作系统监控工具Nmon的概念. ...

  6. 【转】一文掌握 Linux 性能分析之网络篇

    [转]一文掌握 Linux 性能分析之网络篇 比较宽泛地讲,网络方向的性能分析既包括主机测的网络配置查看.监控,又包括网络链路上的包转发时延.吞吐量.带宽等指标分析.包括但不限于以下分析工具: pin ...

  7. OpenStack-Neutron-Fwaas-代码【一】

    Kilo的代码中对Fwaas做了优化,可以将规则应用到单个路由上 但是juno里面还是应用到租户的所有路由上的,因此对juno的代码做了修改 1. 介绍 在FWaaS中,一个租户可以创建多个防火墙,而 ...

  8. 【Linux】防火墙与CentOS中的iptables

    [iptables] 参考好文:http://www.zsythink.net/archives/1199.这个博客的作者写了深入浅出的iptables介绍,基本上我就是做个他的读书笔记. ■ 基本介 ...

  9. 【Pyhon】利用BurpSuite到SQLMap批量测试SQL注入

    前言 通过Python脚本把Burp的HTTP请求提取出来交给SQLMap批量测试,提升找大门户网站SQL注入点的效率. 导出Burp的请求包 配置到Burp的代理后浏览门户站点,Burp会将URL纪 ...

随机推荐

  1. jQuery获取文本节点之 text()/val()/html() 方法区别

    1. 无参html():取得第一个匹配元素的html内容.这个函数不能用于XML文档.但可以用于XHTML文档,返回的是一个String 例子: html页面代码:<div><p&g ...

  2. Android — Camera聚焦流程

    原文  http://www.cnphp6.com/archives/65098 主题 Android Camera.java autoFocus()聚焦回调函数 @Override public v ...

  3. MVC3.0 上传图片并生成缩略图

    转自:http://mikelai.blog.163.com/blog/static/18411126620118771732675/ Controller: public ActionResult ...

  4. FFmpeg中HLS文件解析源码

    不少人都在找FFmpeg中是否有hls(m3u8)解析的源码,其实是有的.就是ffmpeg/libavformat/hlsproto.c,它依赖的文件也在那个目录中. 如果要是单纯想解析HLS的话,建 ...

  5. scala 学习笔记(07) 一等公民的函数

    在scala中一切皆对象,一切皆函数,函数跟Int,String.Class等其它类型是处于同等的地位,换句话说,使用函数跟使用普通的类型一样,没什么区别,因此: 1.函数可以赋值给变量,可以当参数传 ...

  6. [JAVA教程] 2016年最新spring4框架搭建视频教程 【尚学堂】

    Spring4框架 主讲:邹波 类型:SSH 适合对象:学习完javase.数据库技术.jdbc者 Spring4.0作为一个广泛使用的开源框架,它由Rod Johnson创建.它是为了解决企业应用开 ...

  7. OkHttp使用教程

    Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...

  8. mvc5 Html.EditorFor html属性有了新变化,和以前的不同了

    @Html.EditorFor(model => model.MaxNumber, new { htmlAttributes = new { @min = "1" } })

  9. Redirect和Dispatcher 区别

    使用forward是服务跳转,浏览器不知道它所请求的具体资源来源,浏览器的地址栏不会变:使用redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL ...

  10. HTTP 状态代码表示什么意思?

    HTTP 状态代码表示什么意思? 如果某项请求发送到您的服务器要求显示您网站上的某个网页,服务器将会返回 HTTP 状态码响应请求.此状态代码提供关于请求状态的信息,一些常见的状态代码为: 200 - ...