一、问题描述

有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为wi,且 ∑i=1nwi≤c1+c2\sum _{i=1}^{n} wi\leq c1+c2∑i=1n​wi≤c1+c2

装载问题要求确定,是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。如果有,找出一种装载方案。

分析:

(1)首先将第一艘轮船尽最大可能装满;

(2)然后将剩余的集装箱装上第二艘轮船。


代码

//最优装载问题,时间复杂度为O(2^n)
#include<iostream>
#include<cstring>
using namespace std;
#define N 10
int n;//n为集装箱的个数
int c1;//船1的装载容量
int c2;//船2的装载容量
int x[N];//存哪些节点存进树中了1,哪些节点没有存进去 0
int w[N];//每个集装箱的重量
int bestx[N];
int cw;//现在已经计算出来的集装箱的和
int bestcw=0;//最优解
void backtrack(int t,int c){if(t>n){if(cw>bestcw){bestcw=cw;for(int i=1;i<=n;i++){bestx[i]=x[i];}}else return;}else{ if(cw+w[t]<=c){//搜索左子树 cw+=w[t];x[t]=1;backtrack(t+1,c);cw-=w[t]; //还原x[t]=0;//返回上一层是两个都还原 }else{x[t]=0;backtrack(t+1,c);//搜索右子树}}
}
int main(){memset(x,0,sizeof(x));memset(bestx,0,sizeof(bestx));cout<<"请输入集装箱的个数:"<<endl;cin>>n;cout<<"请输入第一艘船的最大载重量:"<<endl;cin>>c1; cout<<"请输入第二艘船的最大载重量:"<<endl;cin>>c2;cout<<"请输入每个集装箱的重量:"<<endl;for(int i=1;i<=n;i++)cin>>w[i]; cout<<"第一艘船上装的集装箱是:"<<endl;backtrack(1,c1);for(int i=1;i<=n;i++)if(bestx[i])cout<<i<<" ";cout<<endl; cout<<"第一艘船的最优载重量是:";cout<<bestcw<<endl;bestcw=0;for(int i=1;i<=n;i++){if(!bestx[i]) bestcw+=w[i];}if(bestcw>c2){cout<<"这艘船不能装下剩下的所有集装箱!"<<endl; }else{cout<<"第二艘船上装的集装箱是:";for(int i=1;i<=n;i++)if(!bestx[i]) cout<<i<<" ";cout<<endl;cout<<"第二艘船的最优载重量是:";cout<<bestcw<<endl;}return 0;
}

有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为wi,且 装载问题要求确定,是否有一个合理的装载方案可将这n相关推荐

  1. 贪心算法解决最优装载问题c语言,贪心算法解决最优装载问题

    <贪心算法解决最优装载问题>由会员分享,可在线阅读,更多相关<贪心算法解决最优装载问题(4页珍藏版)>请在人人文库网上搜索. 1.author : Kevin Black/这个 ...

  2. 最优装载问题(将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 )

    最优装载问题是将一批集装箱装上一艘载重为轮船,其中集装箱i的重量为Wi(0<=i<=n-1) 最优装载问题是指在装载体积不受限制的情况下,求使得集装箱数目最多的装载方案 e.g: 设有重量 ...

  3. 【Mysql】一个简易的索引方案

    一.没有索引的时候如何查找 先忽略掉索引这个概念,如果现在直接要查某条记录,要如何查找呢? 在一个页中查找 如果表中的记录很少,一个页就够放,那么这时候有 2 种情况: 用主键为搜索条件:这时就是之前 ...

  4. Windows 10安装,给你一个纯净的安装方案。同样适用于Windows 7

    安装效果 安装完成后,桌面只有回收站,就是这么简洁. 安装步骤 一.在MSDN找镜像 点我进入下载地址 操作系统->Windows 10 选择Multiple Editions的版本(由多个版本 ...

  5. 构建一个分布式操作系统的简单方案—答陈硕的“分布式系统中的进程标识”一文...

    对分布式系统中的进程标识"一文的疑问 刚才看到陈硕先生的一篇blog:"分布式系统中的进程标识",地址:http://www.cnblogs.com/Solstice/a ...

  6. 做小程序费用太高?帮你选一个最省钱的方案

    2019独角兽企业重金招聘Python工程师标准>>> 随着小程序的应用日益广泛,这种"小而美",无需下载安装,使用方便."触手可及"的手机应 ...

  7. 工业视觉检测入门——如何设计一个合适的检测方案?(需求分析+光学设计+检测算法+UI交互+后端数据)

    工业视觉检测入门--如何设计一个合适的检测方案?(需求分析+光学设计+检测算法+UI交互+后端数据) 一.需求分析 二.光学方案设计 二.检测算法 三.UI交互 四.后端数据 五.后记 视觉检测现在已 ...

  8. 一个好的SEO方案,让客户信服

    一个好的SEO方案,让客户信服,自己财源滚滚 前言:从事SEO工作也有两年多时间了,为很多网站出过SEO解决方案,因为喜欢SEOWHY的环境,这次申请达人,决定拿出点实在的东西和大家一起分享,希望大家 ...

  9. 设计一个秒杀系统-秒杀方案分析

    学习使用,老鸟飞过,欢迎交流 秒杀系统应该考虑哪些因素 高可用:秒杀系统最大的特点就是并发高,在极短的时间内, 瞬间用户量大.试想一下双11的时候可能会有几十万的用户去访问同一个商品详情页面秒杀同一个 ...

最新文章

  1. matlab怎么没有编辑器,在不打开编辑器窗口的情况下开始一个新的MATLAB会话
  2. python描述器 触发事件_Python面向对象 - 描述器
  3. 关于Struts2三种访问Servlet API方式的总结
  4. Vmware Ubuntu 自适应屏幕 进入全屏模式
  5. 我和ABP vNext 的故事
  6. php server 连接字符串,sqlServer 数据库常用连接字符串
  7. 网页html 图片横向摆放,css实现多张图片横向居中显示的方法
  8. Xcode设置苹果应用的app icon和launch image(应用图标和启动页面)
  9. 计算机毕业设计之答辩
  10. 从我国第一例计算机病毒是小球病毒,传入我国的第一例计算机病毒是
  11. au计算机内录音乐,电脑中如何使用 Audition 内录声音
  12. Python做出来的数据可视化真香!!
  13. opencv GPU加速 多GPU卡指定GPU索引方法
  14. matlab网孔电流法,网孔电流法解题方法
  15. 计算机中常用t来表示,2012年计算机等级考试一级B考点详解(4)
  16. 企业邮箱支持通过手机号登录邮箱
  17. pandas DataFrame数据重命名列名的几种方式
  18. 给应届毕业生的建议:萌新程序员找工作的三板斧
  19. c语言反三角函数值域,反三角函数的定义域和值域
  20. 修复 IDEA 使用 Gradle 构建出错时的乱码问题(maven项目转Gradle后乱码,并报“错误,找不到符号”)

热门文章

  1. 科普 | 微服务和软件技术栈
  2. 面试官:限制系统扩展能力的瓶颈有哪些?
  3. Java守护线程概述
  4. 回答我,停止 Goroutine 有几种方法?
  5. Linux线程(二)
  6. HEVC流媒体服务器被过度炒作的5个原因
  7. 当AI成为基础资源,360OS 发力在线教育的重心——专访360OS张焰
  8. 腾讯视频P2P带宽节省率持续提升之路
  9. 音视频技术开发周刊 92期
  10. Nginx Rtmp Module - HLS切片和级联播放