有若干个箱子,假设每个箱子的最大承重为 MaxW 。将货物分配装箱
今天在博客园中看到一个博问,就写了下实现代码。
问题:
有若干个箱子,假设每个箱子的最大承重为 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 。将货物分配装箱的更多相关文章
- 【算法】C++用链表实现一个箱子排序附源代码详解
01 箱子排序 1.1 什么是分配排序? 分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O ...
- JavaScript写一个小乌龟推箱子游戏
推箱子游戏是老游戏了, 网上有各种各样的版本, 说下推箱子游戏的简单实现,以及我找到的一些参考视频和实例: 推箱子游戏的在线DEMO : 打开 如下是效果图: 这个拖箱子游戏做了移动端的适配, 我使用 ...
- 用C#制作推箱子小游戏
思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图 (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...
- hdu.1254.推箱子(bfs + 优先队列)
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- [转]Flash ActionScript2.0面向对象游戏开发-推箱子
本文转自:http://www.alixixi.com/Dev/W3C/Flash/2007/2007070868666.html 概述: Flash ActionScript2.0是一种面向对向的编 ...
- 叠罗汉III之推箱子
有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须小于下面的箱子.请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起 ...
- [HDU 1254] 推箱子
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- HDU 1254 推箱子 BFS
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1254 题目分析: 做这道题,感觉挺简单的,做着做着就错了20次, 我也是醉了, WA到吐的节奏啊! 思 ...
- HDU_1254——推箱子,两次BFS
这题做的一把鼻涕一把泪,果断考虑不周555 Problem Description 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱 ...
随机推荐
- <2013 07 06> "极路由" 与 “家庭服务器” 报道两则
跟我做!打造家庭服务器 很久没有更新了,因为之前托朋友帮我弄的mini PC终于到手了.阴差阳错地,原来只打算弄一台将就可用的低功耗下载机,结果到手的却是一台支持1080p(宣称,还没烧过),还带遥控 ...
- js,jquery和dojo操作dom
最近想学习arcgis javascript api,拦路虎就是dojo,为了便于理解dojo,在学习dojo的同时参考原生js和jquery,下午学习了下dom操作,mark下! 一.获取元素 js ...
- curl学习总结
1.接口 function interface($postfields=array(),$url){ //设置post请求HTTP头字段的数组 $httpheader ...
- .Net自带ChartControl报错:Auto interval does not have proper value
出现这个错误的原因是我们给ChartControl同时设置了Minimum和Maxmum的值,而这两个值又恰好相等. chart.ChartAreas[0].AxisY.Minimum=min; ch ...
- Insert Buffering
14.5.13.4 Insert Buffering Database applications often insert new rows in the ascending order of the ...
- Java输入输出重定向代码
try { BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt")) ...
- Linux中接收键盘输入
read 选项 变量名 -p "提示信息" -t 指定等待时间,不指定则一直等待 -n 指定接收的字符数,不指定则不限制 -s 隐藏输入的数据,适用于机密 ...
- excel同时冻结首行和首列怎么操作
之前ytkah只知道excel可以冻结首行或首列,但还不清楚如何同时冻结excel首行和首列,后面看到小C的报表,问了他才明白怎么操作. 首先,我们先把选中B2单元格,点击导航菜单的“视图” - “冻 ...
- Python2 socket 多线程并发 TCPServer Demo
#coding=utf-8 import socket import threading,getopt,sys,string opts, args = getopt.getopt(sys.argv[1 ...
- 简单springmvc在Eclipse的Tomcat上部署404error,直接在Tomcat上部署可以访问
在Eclipse工程下的.setting文件夹的org.eclipse.wst.common.component这个文件,如下则可以访问: <?xml version="1.0&quo ...