有若干个箱子,假设每个箱子的最大承重为 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的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱 ...
随机推荐
- 巨蟒django之CRM3 添加和编辑客户&&公户和私户的展示和转换
昨日内容回顾: day66 1. 内容回顾 1. 数据的展示 数据通过ORM查询出来 对象列表 QuerySet 1. 普通的字段 对象.字段名 ——> 数据库中的值 2. choices (( ...
- git commit -a -m "M 1、引入mixin,公共样式mixin传参处理;";git push origin master:master
<script> import wepy from 'wepy' import api from '../api/api' export default class recharge ex ...
- Exponential Backoff
f^x(f^y+f-m)+f-n =f^(x+y)+f^(f-m)+(f-n) <?php $exponent=0; w(80,3); function w($input,$base){ glo ...
- jQuery方法find()与children()区别
一.find() 1.1 说明 find()方法返回被选元素的后代元素,一路向下直到最后一个后代. 1.2 示例 <div> <p> <span>1</spa ...
- ArcGIS Server Q&A
持续更新.. 一. AGS Server10发布mobile data access 出现错误 问题描述: "ArcGIS Server: Configuration <name> ...
- javascript之冒泡排序
Array.prototype.bubble = function () { var temp; //第1轮比较求第一,第二轮求第二,以此类推(i<=数组成员的个数); for (var i = ...
- HNOI2019爆零记
HNOI2019真-爆零祭 我怎么这么菜QAQ day-37 从学科溜过来搞OI. 班主任一直在谈论我退役的事情,这就是NOIP挂分的后果...说我没考好就找理由,人家xxxxxxx可不是xxxxxx ...
- django实现密码加密的注册(数据对象插入)
在 django实现密码非加密的注册(数据对象插入)的基础上,我们对视图和注册页面进行了简单修改 视图 from django.shortcuts import render,redirect,ren ...
- checkmarx使用笔记、原理
checkmarks是一款商业的代码静态分析工具,和pmd类似的地方是他分析的是java文件,而非class文件.checkmarks使用 .net开发,必须安装在windows上,它的规则也是类似. ...
- Python基础-configparser和hashlib模块
configparser模块 import configparser config = configparser.ConfigParser() #将配置写入到文件 config[', 'Compres ...