6-2 装载问题(分支限界)

news2024/11/28 21:59:47

6-2 装载问题(分支限界)

一、问题描述

有一批共个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为Wi,且
在这里插入图片描述
采用下面的策略可得到最优装载方案:
(1)将第一艘轮船尽可能装满;
(2)将剩余集装箱装上第二艘轮船;

二、问题分析

1、队列式分支限界法

在这里插入图片描述
在这里插入图片描述
⒉.算法的改进(右子树加入剪枝条件)
上述算法中右子没有剪枝,效率较差。
策略:设bestw是当前最优解;ew是当前扩展结点所相应的重量;r是剩余集装箱的重量。
则当ew+rsbestw时,可将其右子树剪去。
为确保右子树成功剪枝,算法每一次进入左子树的时候更新bestw的值。不要等待i=n时才去更新。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、代码

//队列式分支限界法  
/*没有构造最优解
10 3
3 4 5

10 4
3  4 5 6
*/
#include<iostream> 
#include<queue> 
using namespace std;
queue<int>q;
int w[100]; //集装箱的重量 
int c;
int r;//r剩余没装的总重量 ,r的初值为全部集装箱重量之和 
int n;//n个集装箱 
int bestw=0;//当前最优载重量 
void MaxLoading(){
	int top=0;
	int left=r;
	q.push(-1);
	int i=1;//第i层 
	r=r-w[1];
	while(i<=n&& !q.empty()){
		if(i==1){
			if(top+w[i]<=c){
				q.push(top+w[i]);	
				cout<<top+w[i]<<" ";
			}
			q.push(top); 
			cout<<top<<" ";
		}
		top=q.front();
		q.pop();
		if(top==-1&&!q.empty()){
			q.push(-1);
			cout<<"-1\n";
			i++;
			top=q.front();
			q.pop();
			r=r-w[i];
		}
		int wt=top+w[i];
		if(wt<=c){
			if(wt>bestw) bestw=wt;
			if(i<n){
				q.push(wt);
				cout<<wt<<" ";
			} 
		}
		if(top+r>bestw){
			if(i<n){
				q.push(top);
				cout<<top<<" ";
			} 
		}
	}
		
} 
int main(){
	cin>>c;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i];	
		r=r+w[i];
	}	
	cout<<"----------\n";
	MaxLoading();
	cout<<"bestw="<<bestw<<endl; 
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于rsync daemon 实现 sersync——sersync实现实时数据同步

1 sersync 介绍 sersync类似于inotify&#xff0c;同样用于监控&#xff0c;但它克服了inotify的缺点. inotify最大的不足是会产生重复事件&#xff0c;或者同一个目录下多个文件的操作会产生多个事件&#xff0c;例如&#xff0c;当监控目录中有5个文件时&#xff0c;删除目录…

[附源码]计算机毕业设计springboot考试系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

学习C语言的优质网站

1. 初衷 C语言是最原始的操作操作数据结构和算法的一门编程语言&#xff0c;没有高级语言的封装&#xff0c;最能锻炼个人的算法思维和能力。 2. 编程网站推荐 2.1 javatpoint https://www.javatpoint.com/static-in-c 2.2 includehelp https://www.includehelp.com/c/ 2.…

Hadoop学习笔记——HDFS

文章目录一、HDFS概述1.1、HDFS产出背景及定义1.1.1 HDFS产生背景1.1.2 HDFS定义1.2、HDFS优缺点1.2.1、HDFS优点1.2.2、HDFS缺点1.3、HDFS组成架构1.4、HDFS文件块大小1.5、限制二、HDFS的Shell操作2.1、基本语法2.2、命令大全2.3、常用命令实操2.3.1 准备工作2.3.2 上传一、H…

快速复现 实现 facenet-retinaface-pytorch 人脸识别 windows上 使用cpu实现

目录0 前言1 搭建环境与项目2 人脸预测与结果展示0 前言 这一次要复现的是人脸识别中的 facenet-retinaface-pytorch 是在上一次博客的内容上更进一步 快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比 参考了&#xff1a; Pytorch 利用Facenet和Reti…

10 Deployment:让应用永不宕机

文章目录1. 前言2. 为什么要有deployment 对象&#xff1f;3. 如何使用 YAML 描述 Deployment?3.1 查看 Deployment 的基本信息3.2 命令式创建Deployment 的YAML模板3.2.1 Deployment 的关键字段3.2.1.1 replicas 副本字段3.2.1.2 selector 标签筛选字段3.2.1.3 为什么在 YAML…

JAVA学习-java基础讲义02

java基础讲义02一 进制1.1 进制介绍1.2 二进制1.3 任意进制到十进制转换1.4 十进制到任意进制之间的转换1.5 快速转换法1.6 有符号数据表示法二 Java变量和数据类型1.1 变量概述1.2 数据类型1.3 变量定义三 Java数据类型转换3.1 数据类型转换概述3.2 数据类型转换之自动类型转换…

使用自己的数据集测试Unbiased Mean Teacher for Cross-domain Object Detection

要复现Unbiased Mean Teacher for Cross-domain Object Detection&#xff08;UMT&#xff09;&#xff0c;首先要正确运行CycleGAN。 1. CycleGAN CycleGAN的github链接&#xff1a;https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix 1.1 CycleGAN环境配置 git cl…

低代码助力生产管理:车间管理系统

在当前制造业全球化、网络化、敏捷化的背景下&#xff0c;制造业信息化是目前生产的主要趋势。其中车间是制造企业的核心单元&#xff0c;是企业生产计划的具体实施环节&#xff0c;同时负责反馈实时生产信息。因此车间层的信息资源集成和生产管理控制是整个企业生产供应链控制…

[Power Query] 快速计算列

对两列或者多列的计算&#xff0c;在Power Query中除了通过自定义列来实现以外&#xff0c;我们也可以通过利用功能区的【添加列】|【标准】运算功能进行列的计算 数据源 将数据源导入到Power BI Desktop&#xff0c;单击【转换数据】选项&#xff0c;进入Power Query查询编辑…

python对异常的处理

了解异常当检测到一个错误时&#xff0c;解释器就无法继续执行了&#xff0c;反而出现一些错误的提示&#xff0c;这就是异常。测试&#xff1a;f open(test.txt,r) #以读模式打开文件&#xff0c;文件不存在则报错 运行了解释器报错避免出现异常提示的写法 #需求&#xff1a;…

串口通信及串口转蓝牙相关知识

之前没有接触过硬件相关的工作&#xff0c; 因此对硬件的知识一知半解。 最近由于项目需要&#xff0c; 用到了串口通信以及串口跟蓝牙之间通信相关的东西。记录下来&#xff0c; 希望对新手有所帮助。 如有疏漏之处&#xff0c; 欢迎指正。 1 串口通信 https://www.jishulin…

docker-compose安装部署gitlab中文版

文章目录前言一、环境信息二、准备部署1.准备路径2.安装docker-compse&#xff0c;下载镜像3.引入库2.执行部署三、登陆页面前言 记录一下使用docker-compose部署gitlab平台的过程 一、环境信息 操作系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) gitlab镜像版本…

世界杯winner只属于你——MESSI

其实现在大脑中还在回忆着那一脚精彩的进球。 看官方怎么说的&#xff1a; 北京时间11月27日凌晨3点&#xff0c;世界杯C组第2轮&#xff0c;阿根廷2-0战胜墨西哥。 梅西在11月27日用1进球1助攻&#xff0c;上帝降临&#xff0c;拯救阿根廷。特别是那个进球&#xff0c;直接让…

矩阵快速幂 笔记加理解

文章目录1.何为快速幂1.1学习快速幂的好文章1.2快速幂取模代码&#xff08;对1000取模&#xff09;2.矩阵快速幂1.何为快速幂 补充一个公式证明&#xff1a; 1.1学习快速幂的好文章 http://t.csdn.cn/agKop 1.2快速幂取模代码&#xff08;对1000取模&#xff09; ll fast…

VMware虚拟网络编辑器配置

一&#xff0c;NAT模式网络设置。 把下面的ip&#xff0c;子网掩码&#xff0c;网关记住。 切换到network-scripts 目录下。 cd /etc/sysconfig/network-scripts/修改ifcfg-ens33 这个文件。 然后重启网络服务&#xff1a; 对于openEuler&#xff1a; systemctl restart Ne…

关于Eslint语法检查

在vue创建项目中&#xff0c;选择eslintStandard config -标准规范- 在保存时就开启检查 eslintrc.js配置&#xff0c;没反应重启项目 语法报错&#xff0c;根据错误提示&#xff0c;去eslint官网搜索规则 在eslintrc.js文件中rules中添加或者修改规则&#xff0c;自定义的…

猿如意|IntelliJ IDEA Community下载安装以及基础开发设置和快捷键设置的详细教程

文章目录 一、如何在猿如意官网中下载IntelliJ IDEA Community&#xff1f; 二、关于IntelliJ IDEA Community的安装以及使用前的设置教程 1.下载安装 2.基础开发设置 三、总结 一、如何在猿如意官网中下载IntelliJ IDEA Community&#xff1f; 我们要想能够更简单的获取到Int…

【愚公系列】华为云系列之DevCloud+ECS+MySQL搭建超级冷笑话网站【开发者专属集市】

文章目录前言1.项目背景2.项目介绍3.所需华为云环境一、华为云系列之DevCloudECSMySQL搭建超级冷笑话网站1.创建项目2.创建代码仓库3.创建数据库4.修改代码5.编译构建6.部署7.环境准备8.导入主机9.部署应用10.应用访问11.资源释放11.1 释放 ECS 资源11.2 释放 RDS 资源总结前言…

[附源码]Python计算机毕业设计Django的校园报修平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…