poj 1017 packets (贪心)
来源:互联网 发布:服务器定时重启软件 编辑:程序博客网 时间:2024/05/06 09:21
装箱问题
问题描述
一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个
型号,他们的长宽分别为 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. 这些产品通常使用一个 6*6*h
的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的
包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。现在这个程序由
你来设计。
输入数据
输入文件包括几行,每一行代表一个订单。每个订单里的一行包括六个整数,中间用空
格隔开,分别为 1*1 至6*6 这六种产品的数量。输入文件将以 6 个0 组成的一行结尾。
输出要求
除了输入的最后一行6 个0 以外,输入文件里每一行对应着输出文件的一行,每一行输
出一个整数代表对应的订单所需的最小包裹数。
输入样例
0 0 4 0 0 1
7 5 1 0 0 0
0 0 0 0 0 0
输出样例
2
1
确定好贪心策略,模拟就好了,网上的思路
#include<iostream>using namespace std;int num_2[] = {0,5,3,1};int num_1[] = {0,7,6,5};int main(){int a[7],ans,flag;while(1){flag=1;ans=0;for(int i=1;i<=6;i++){cin>>a[i];if(a[i]!=0)flag=0;}if(flag)break;ans=a[6]+a[5]+a[4]+(a[3]+3)/4;//4 5 6 尺寸的每个都要新开箱子/*将新开的箱子尽量填满*/ int a2 = a[4]*5 + num_2[a[3]%4];//尽量填满3 4 所需要2箱子的个数int a1 = a[5]*11 + num_1[a[3]%4];//填完2填1 if(a[2]>a2)//有剩余新开箱子{ ans+=(a[2]-a2+8)/9;//9 个2*2箱子可以填满一个6*6箱子,不足9个算一个a1+= 36-((a[2]-a2)%9)*4;//将新开的箱子用1*1填} else //没有或者不够:2 不用新开箱子,不够的用1来填 { a1+=(a2-a[2])*4;} if(a[1]>a1)ans+=(a[1]-a1+35)/36;//除以36 向上取整,不足36个也新开一个 cout<<ans<<endl;}}
0 0
- POJ 1017 Packets (贪心)
- POJ 1017 Packets (贪心)
- POJ 1017 Packets(贪心)
- POJ 1017-Packets(贪心)
- POJ 1017 Packets(贪心)
- POJ 1017 Packets (贪心)
- poj 1017 packets (贪心)
- Packets(POJ 1017, 贪心)
- poj 1017 Packets【贪心】
- POJ 1017 Packets(贪心)
- poj 1017 Packets(贪心)
- poj 1017 Packets ( 贪心 )
- POJ 1017Packets(贪心)
- Packets (poj 1017 贪心)
- poj 1017 Packets 贪心
- POJ 1017 Packets(贪心)
- POJ 1017 Packets (贪心)
- POJ 1017 Packets 贪心
- sublime c++和java环境的配置文件
- 第十章 Android的消息机制
- 第十一章 Android的线程和线程池
- lucene学习笔记(二)lucene建立索引
- 第十二章 Bitmap的加载和Cache
- poj 1017 packets (贪心)
- C++编程优化——让你的代码飞起来
- RecycleView调用notifyDataSetChanged在Tv端焦点丢失问题
- 如何做性能优化?
- MySQL自学笔记6--触发器
- 第十三章 综合技术
- Java中的Iterator(迭代器)的用法
- lucene学习笔记(三)lucene搜索查询
- 算法之路三:HUD OJ:2007