描述
一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小每个订单运送时的包裹数量。他们很需要有一个好的程序帮他们解决这个问题从而节省费用。
解决思路
1.4*4, 5*5, 6*6这三个型号的长方体需各占一个包裹;
2.4个3*3的长方体占一个包裹,数量对4取余之后不为0则需要多占一个包裹;
3.计算以上四种型号的长方体装完之后剩余空间可装2*2和1*1的数量,记为count1和count2
4.对比count2与需求数,若空位不够用则根据数量需求再添加包裹,同时更新count2;
5.根据count2更新count1,计算最终需要的包裹总数。
答案
import java.util.Scanner;
public class Test2 {
public static void main(String [] args){
Test2 t = new Test2();
t.input();
}
/**
* 输入方法
*/
public void input(){
Scanner scan = new Scanner(System.in);
while(scan.hasNextLine()){
String lineStr = scan.nextLine();
if(lineStr.startsWith("0 0 0 0 0 0")){
break;
}
String[] boxStr = lineStr.split(" ");
int[] boxInt = new int[boxStr.length];//存储每个的数量boxInt[3]的值,代表有3*3*h的东西有多少个
for(int i=0;i<boxStr.length;i++){
boxInt[i] = Integer.parseInt(boxStr[i]);
}
getPacCount(boxInt);
}
scan.close();
}
/**
* 获取所需箱数量的方法--核心方法
* @param a
*/
public void getPacCount(int [] a){
int count =a[5]+a[4]+a[3];//底面边长为6,5,4的长方体,每一个都需要占用一个单独的包裹
int count1=11*a[4];//每一个边长为5的长方体装入包裹后剩余空间可放置11个底面边长为1的长方体
int count2=5*a[3];//每一个底面边长为4的长方体放入包裹后剩余空间可放置5个底面边长为2的长方体
if(a[2]>0){//如果需要放置底面边长为3的长方体
count=count+a[2]/4;
int m=a[2]%4;
if(m!=0){
count=count+1;
if(m==1){//若对4取余后剩余1个底面边长为3的长方体
count2=count2+5;//则剩余空间可放置五个2*2的长方体
count1=count1+7;//同时可放置7个1*1的长方体
}
else if(m==2){
count2=count2+3;//则剩余空间可放置3个2*2的长方体
count1=count1+6;//同时可放置6个1*1的长方体
}
else if(m==3){
count2=count2+1;//则剩余空间可放置1个2*2的长方体
count1=count1+5;//同时可放置5个1*1的长方体
}
}
}
if(a[1]>0){//如果需要放置2*2的长方体
if(count2>=a[1]){//如果剩余2*2的空间数量>需要放置的2*2长方体的数量
count2=count2-a[1];//剩余2*2的空间的数量做相应的扣减
}
else if(count2<a[1]){//如果剩余2*2的空间数量<需要放置的2*2长方体的数量
count=count+(a[1]-count2)/9;//计算需要用到的箱子数量
int n=(a[1]-count2)%9;//计算取余后剩余的2*2的长方体的数量
count2=0;//因本来剩下的空间不够,所以此时count2=0
if(n!=0){
count=count+1;
count2=9-n;//装完2*2长方体后箱中剩余空间
}
}
}
if(a[0]>0){//如果需要装1*1的长方体
count1=count1+4*count2;//获取装完其它的长方体后所有的剩余空间
if(count1<a[0]){//如果剩余空间不够装,够装的话就不需要任何处理了
count=count+(a[0]-count1)/36;
if((a[0]-count1)%36!=0){
count=count+1;
}
}
}
System.out.println(count);
}
}
分享到:
相关推荐
三维装箱问题是一种经典的组合优化问题,涉及到在有限的三维空间内如何有效地放置不同尺寸的物品,以最大化容器的利用率或最小化所需的容器数量。在物流、仓储、包装设计等领域有广泛应用。这个问题的复杂性在于它...
《三维装箱问题及其解决方案——遗传算法与模拟退火》 在物流、仓储及制造业等领域,如何高效地利用有限的空间来装载物品是一个重要的优化问题,这就是所谓的“三维装箱问题”(3D Bin Packing Problem)。它涉及到...
一维装箱问题,也称为一维背包问题或一维空间分配问题,是组合优化领域的一个经典问题。在物流、仓库管理、生产计划等实际场景中广泛应用。问题的基本设定是:有一系列物品,每个物品都有一定的长度(或重量),目标...
### 集装箱的装箱问题(C语言算法) #### 一、问题背景与描述 在实际工业生产中,为了最大化利用空间资源,经常需要解决如何高效地将各种形状和大小的物品装入特定容器中的问题。其中,集装箱装箱问题就是这类问题...
数学建模-装箱问题PPT课件 数学建模中的装箱问题是指寻找一种方法,使得能以最小数量的箱子数将n个物品J1,J2,…,Jn全部装入箱内。这个问题是一个经典的组合优化问题,有着广泛的应用,在日常生活中也屡见不鲜。 ...
三维装箱问题,也称为三维背包问题或者三维堆叠问题,是运筹学中的一个经典问题,属于组合优化的范畴。在物流、仓储、制造业等领域有着广泛的应用,它旨在找到最优的方式将不同尺寸的物品放入有限的三维空间(长、宽...
实验2装箱问题-贪心算法 在本实验中,我们将学习贪心算法的设计和实现,以解决装箱问题。贪心算法是一种常用的近似算法,通过选择当前最优解来逐步构建解决方案。 问题描述 装箱问题是计算机科学中的一类经典问题...
三维装箱问题,也称为三维空间填充问题,是物流、仓储和包装领域中常见的优化问题。在该问题中,目标是找到一个最佳方式将不同尺寸的物体放入一个三维空间(箱子)内,使得空间利用率最高,同时保持物体间不相交。...
数学建模装箱问题PPT学习教案 数学建模装箱问题是一种经典的组合优化问题,它有广泛的应用,在日常生活中也屡见不鲜。装箱问题是指寻找一种方法,使得能以最小数量的箱子数将物品装入箱内。 装箱问题的描述: 设...
在IT领域,装箱问题(Packing Problem)是一种经典的组合优化问题,广泛应用于物流、生产计划、计算机图形学等多个方面。这里的"矩形_装箱_矩形框_装箱问题直观_"指的是如何通过可视化的方式,用矩形框来解决装箱...
【基于遗传算法的多维装箱问题的研究】 装箱问题是一个经典的组合优化难题,属于NP完全问题范畴。它涉及到在考虑容器的承重、体积等限制条件下,如何有效地分配物品到有限数量的容器中,以达到空间利用率的最大化,...
标题中的“matlab二维装箱问题求解”指的是在MATLAB环境下解决二维装箱问题的算法实现。二维装箱问题,也称为二维包装问题或二维布局问题,是运筹学和组合优化领域的一个经典问题。它涉及到如何在有限大小的二维空间...
二维装箱问题顾名思义就是将若干个矩形物品装进矩形箱子中,并且在装箱的过程中不允许将矩形物品斜着放(PS:下图就是不允许的装箱操作),同时在装箱过程中允许将物品旋转90度放置(但是为了简单地求解问题,我们...
装箱问题,也被称为 bin packing problem,是运筹学和计算机科学中的一种经典优化问题。在实际场景中,它常用于资源分配、物流规划、内存管理等领域。此问题的目标是将一定数量和大小的物品有效地放入有限数量和大小...
### 装箱问题的相关文献资料 #### 一、引言 装箱问题(Bin Packing Problem)是计算机科学与运筹学领域中的一个重要且经典的优化问题。它涉及到将一组物品分配到数量最少的容器(箱子)中,每个容器都有一定的容量...
二维装箱问题是一种经典的组合优化问题,常在物流、仓储、印刷、电子设备布局等领域中出现。该问题的目标是寻找最优的方式将多个矩形地块(物品)放入一个或多个矩形区域(箱子)中,使得空间利用率最大化或者浪费...
"基于遗传优化算法的三维装箱问题的优化仿真,matlab2021a测试"这一项目聚焦于利用先进的算法解决实际问题,即如何高效地在三维空间内放置物品,最大化空间利用率并减少浪费。遗传优化算法是一种模仿生物进化过程的...
在装箱问题中,目标是尽可能少地使用容量为V的箱子来装满n种不同体积的物品,每种物品的体积不超过V。这是一个典型的优化问题,因为不同的装箱方式可能会导致不同的箱子数量。贪婪算法在此问题中的应用是将物品按照...
三维装箱问题是一种经典的组合优化问题,广泛存在于物流、仓储、包装设计等领域。2019年MCM(Mathematical Contest in Modeling)的B题便聚焦于此,要求参赛者找到一种策略,使得在装箱过程中使用最少的缓震材料,而...