今天在博客园中看到一个博问,就写了下实现代码。

问题:

有若干个箱子,假设每个箱子的最大承重为 MaxW 。有一批物品,它们的重量分别为w1、w2...Wn,假设每个物品的重量都不超过箱子承重。
写个算法,用最少的箱子装完所有物品,并列出每个箱子装载的物品重量?

代码:

public static void main(String[] args){
//初始化长度为50的数组
Integer[] ints=new Integer[20];
//使用随机数机制,随机获取小于20的50个整数,添加到数组
for(int i=0;i<ints.length;i++){
ints[i]=(int)(1+Math.random()*20);
System.out.print(ints[i]+" ");
}
//使用选择排序将数据由大到小排序
int tmp;
for(int i=0;i<ints.length;i++){ for (int j=0;j<ints.length;j++){
if(ints[i]>ints[j]){
tmp=ints[i];
ints[i]=ints[j];
ints[j]=tmp;
}
}
}
System.out.println();
//集合排序后,打印输出
for(int i=0;i<ints.length;i++){ System.out.print(ints[i]+" ");
}
System.out.println();
//实现随机组合装箱为20容积的箱子
//如何去获取装箱组合
int max=20;//初始化箱子的容积
int identSub=ints.length-1;//初始化由后到前取数组元素的下标
int element=0;//初始化获取的数组元素相加的和
int groupNum=0;//初始化组合的数量为0
//从前向后取集合中的每个数据
out:for(int i=0;i<ints.length;i++){
//每一次的第一层循环都将数组相加和设置为0
element=0;
System.out.print("{"); element=ints[i];
System.out.print(ints[i]+" "); //从后向前取每个元素数据,但需要添加标识,记录下次取数的位置
for(;identSub>i;identSub--){ element+=ints[identSub];
//判断当前获取的前后值和是否大于了箱子的容积,如果大于跳出本次循环
if (element>max){
groupNum++;
break;
}
System.out.print(ints[identSub]+" "); }
//如果前后获取到同一个数据时,就跳出整个嵌套循环
if(identSub==i){
System.out.println("}");
groupNum++;
break;
}
System.out.print("}");
System.out.println(); }
System.out.println("需要使用"+max+"容积的箱子数为:"+groupNum);
}

  

代码执行结果:

3  15  14  19  13  4  10  4  20  3  1  7  13  8  18  18  20  5  9  8

20  20  19  18  18  15  14  13  13  10  9  8  8  7  5  4  4  3  3  1

===组合装箱开始===

{20 }

{20 }

{19 1 }

{18 }

{18 }

{15 3 }

{14 3 }

{13 4 }

{13 4 }

{10 5 }

{9 7 }

{8 8 }

===组合装箱结束===

需要使用20容积的箱子数为:12

有若干个箱子,假设每个箱子的最大承重为 MaxW 。将货物分配装箱的更多相关文章

  1. 【算法】C++用链表实现一个箱子排序附源代码详解

    01 箱子排序 1.1 什么是分配排序? 分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O ...

  2. JavaScript写一个小乌龟推箱子游戏

    推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...

  3. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  4. hdu.1254.推箱子(bfs + 优先队列)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  5. [转]Flash ActionScript2.0面向对象游戏开发-推箱子

    本文转自:http://www.alixixi.com/Dev/W3C/Flash/2007/2007070868666.html 概述: Flash ActionScript2.0是一种面向对向的编 ...

  6. 叠罗汉III之推箱子

    有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须小于下面的箱子.请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起 ...

  7. [HDU 1254] 推箱子

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  8. HDU 1254 推箱子 BFS

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目分析: 做这道题,感觉挺简单的,做着做着就错了20次, 我也是醉了, WA到吐的节奏啊! 思 ...

  9. HDU_1254——推箱子,两次BFS

    这题做的一把鼻涕一把泪,果断考虑不周555 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱 ...

随机推荐

  1. Sharepoint server 2016自定义作业不能部署

    最近帮客户部署SharePoint server 2016生产环境,自定义作业总是不能部署上,原来我在部署过程中MinRole选的是Web前端服务器:经过几天的测试研究,发现要有single serv ...

  2. 将DataTable转换成Json格式

    方法一: 将DataTable数据拼接成json字符串,方法如下: ///<summary> /// dataTable转换成Json格式 ///</summary> ///& ...

  3. Creating a Message Queue in PHP Without External Libraries

    w http://www.ebrueggeman.com/blog/creating-a-message-queue-in-php

  4. Docker Metasploit Framework

    https://hub.docker.com/r/usertaken/metasploit-framework/ docker pull usertaken/metasploit-framework ...

  5. xenserver 模板导出导入

    由于业务需求,新增一台xenserver,需要将原先创建好的模板环境导入到新的母机上面,此处记录一下 1.导出模板 # 获取需要导出的模板uuid [root@localhost ~]# xe tem ...

  6. 为什么调用 GdiplusShutdown 函数会在 DllExports::GdipDeleteGraphics(nativeGraphics) 位置抛出异常?

    因为没有仔细看文档 https://docs.microsoft.com/en-us/windows/desktop/api/Gdiplusinit/nf-gdiplusinit-gdiplusshu ...

  7. Vue表格中时间的处理

    Vue中表格的数据应该来自后台数据库,然后从数据库中读取到的数据,时间格式可能有些不同,我们可以根据实际需要来对这个时间进行转化. 这里介绍一个js库,它提供了强大的日期处理功能,功能强大且只有2k大 ...

  8. Linux中命令查找顺序

    第一优先级:用绝对路径或相对路径执行的命令第二优先级:别名指定的命令第三优先级:Bash内部命令第四优先级:$PATH环境变量定义的目录查找顺序中找到的第一个命令

  9. 在像Angular2这样的SPA应用中使用Google Analytics的方法

    Angular2のようなシングルページアプリケーションでGoogleアナリティクスを使う方法 如何在像Angular2这样的SPA应用中使用Google Analytics? 试着调查了一下. 由于S ...

  10. django-admin 登录之后显示页面,表是否显示

    如果是超级用户可以全部看到(如图),如果是普通用户,只能看到user与group 虽然实现了其功能,不过有些地方没搞懂,所以有些地方出了写的不好 ```class PermissionsMixin(m ...