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

问题:

有若干个箱子,假设每个箱子的最大承重为 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. 宇视4G设备采用GB/T28181协议成功接入EasyGBS国标流媒体平台的设置流程

    经过了多天的调试对接,终于将宇视的布控球顺利接入到了EasyGBS的国标平台,特地写一下对接过程中遇到的问题,希望能帮助大家避开一些麻烦: 第一步:电脑连接无线网络IPCWIFI,密码12345678 ...

  2. JavaScript基础深入之

    JS的数值类型是分为两类:基本数据类型和引用数据类型. 基本类型占据的内存栈空间,引用类型被保存在堆空间.引用类型赋值的变量也是被保存在栈空间的,它的作用类似于电视遥控器,负责操作堆空间内指向的对象. ...

  3. MySQL事件的先后

    今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...

  4. Spring Boot在aop中获取request对象

    doBefore(){ ServetRequestAttrbtes attributes = (ServetRequestAttrbtes)RequestContextHolder.getHttpat ...

  5. python3爬虫-分析Ajax,抓取今日头条街拍美图

    # coding=utf-8 from urllib.parse import urlencode import requests from requests.exceptions import Re ...

  6. (4.6)sql server索引缺失提示

    SQLSERVER如何查看索引缺失 sql server索引缺失提示 当大家发现数据库查询性能很慢的时候,大家都会想到加索引来优化数据库查询性能, 但是面对一个复杂的SQL语句,找到一个优化的索引组合 ...

  7. 2015.6.30 反弹的教训(想做T)

    心路:在6.29号,市场连续大跌!我到6.29号才想到可以做T+0.6.30消息面已经利好(双降准),已经计划做T+0(X先买后卖).  开市大跌至跌停.午后所有股票开始反弹.但是上午跌停时不敢入市, ...

  8. FTP主动连接与被动连接

    FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协议,应用层的协议,它基于传输层, FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而 ...

  9. hadoop linux 杂记

    切换到root        su    修改sudo sudo + 命令 --> root权限 + 命令        su root        vim /etc/sudoers      ...

  10. ubuntu安装java jdk

    openjdk安装http://openjdk.java.net/install/ 一.下载 首先,当然是要下载了. 地址:http://www.oracle.com/technetwork/java ...