乘船问题(贪心算法)

问题描述

乘船问题:有N个人,第I个人重量为wi,每艘船的载重上限为C,且最多乘2人。用最少的船装载所有人,求需最少的船数量。

解题思路

首先我们确定该题的要求是:求需最少的船数量,这就要求我们必须保证每一艘船都装载最大。

由于条件最多乘2人限制,和每一艘船至少可以乘坐一个人的条件,我们可以如此设计。

选择最轻和最重乘客与C进行比较,如果大于C则表示最重乘客无法与其他人同乘,就可以先坐一艘船先走,如小于等于C这直接两个人坐一艘船,船数量加一。

剩下的人重复以上操作,直到所有人全部运送完成。

伪代码设计

Begin
int[] w         //所有人的重量
int c           // 船的载重上限
int s = 0      // 船的数量
sort(w)         // 排序
int i = 0
int j = w.length - 1
//只有考虑完所有船时,结束循环
while i <= jif (w[i] + w[j] <= c) i++j--s++            //每次循环船的数量+1
}
Print "需最少的船数量"+s
End

编程实验

public static void main(String[] args) {//所有人的重量int[] w = {5, 6, 3, 7, 3, 8, 7, 3, 4, 9};// 船的载重上限int c = 10;// 船int s = 0;// 排序Arrays.sort(w);int i = 0;int j = w.length - 1;while (i <= j) {if (w[i] + w[j] <= c) {i++;}j--;s++;}
}

结果

第1次:9
第2次:8
第3次:3 7
第4次:3 7
第5次:4 6
第6次:5 6

乘船问题(贪心算法)相关推荐

  1. 贪心算法--乘船问题

    贪心算法--乘船问题 描述: 有n个人,第i个人的重量为wi,每艘船的最大载重量为c:且最多只能成两个人,用最少的船装载所有的人: 思路: 选择最轻的人i,他应该选择能和他做一艘船的最重的一个人j一起 ...

  2. 贪心算法--乘船问题(easy)

    点击查看:贪心算法模块精讲 题目描述: 有n个人,第i个人重量为wi,每艘船的最大重量均为C,且最多只能乘两个人.用最少的船装载所有人. 题目分析: 贪心策略:考虑最轻的人 i ,如果每个人都无法和他 ...

  3. 基础算法 —— 贪心算法

    [概述] 贪心算法是从问题的初始状态出发,通过若干次的贪心选择而得到的最优值的一种求解策略,即贪心策略. 简单来说,贪心策略是一种在每次决策时采取当前意义下最优策略的算法,做出的选择至少在某种约束条件 ...

  4. 【信息学奥赛一本通 提高组】第一章 贪心算法

    一.贪心算法的特点: 1.贪心选择: 所谓贪心选择是指应用同一规则,将原问题变为一个相似的但规模更小的子问题,而后的每一步都是当前看似最佳的选择,且这种选择只依赖于已做出的选择,不依赖未做出的选择. ...

  5. 算法学习--动态规划与贪心算法

    动态规划与贪心算法都是一种递推算法,都是用局部最优解来推导全局最优解:是对遍历解空间的一种优化:当问题具有最优子结构时,可以用动态规划来解决,而贪心算法是动态规划的特例 动态规划 1. 动态规划的思想 ...

  6. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  7. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  8. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  9. 一份贪心算法区间调度问题解法攻略,拿走不谢

    作者 | labuladong 来源 | labuladong(ID:labuladong) [导读]什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多 ...

最新文章

  1. 折半插入排序稳定吗_C++实现经典算法--折半插入排序
  2. 项目周期一般多久_办公家具定制的特殊性是需要一定的制作周期
  3. 银行有没有可能把800元存款打成80万?如果发生该怎么办?
  4. C++ 11 深度学习(九)C++文件IO
  5. 调整自己--提升自己
  6. 0x00000000指令引用的内存不能为written_JVM03——对象实例化,内存布局,访问定位...
  7. 点个外卖时间,我把「软中断」搞懂了
  8. django动态HTML转PDF方法
  9. 我用Python又爬虫了拉钩招聘,给你们看看2019市场行情
  10. CPU监控工具(CPU使用率及CPU温度监控)
  11. 帆软报表使用心得(转)
  12. Python 实现LU分解
  13. 【LeetCode】75. Sort Colors(颜色排序)-C++实现的两种方法及超详细图解
  14. 怎样做终端安全防御?
  15. 电子计算机分类 可以分为哪些,计算机按照工作原理进行分类可以分为
  16. VEH(向量化异常处理)
  17. python遍历字母_如何遍历字母表?
  18. 微信小程序开发 网络异常监听
  19. 【云速建站】网站的基本设置
  20. FastReport VCL 2022.3

热门文章

  1. Python3暴力解题,计算鬼谷子猜数问题
  2. 算法总结——异或运算
  3. Rabbitmq主从复制
  4. 数据库存储解决方案:网络附加存储(NAS)是个好选择吗?
  5. 10分钟学会python写游戏脚本!Python其实很简单
  6. Kail linux 学习网站
  7. 花旗银行的ATM机的易用点
  8. “炒房团”攻占元宇宙,有人2732万买入一块虚拟土地,林俊杰也花78万入手了
  9. python3实例车代码_python3 爬取汽车之家所有车型数据操作步骤(更新版)
  10. C语言基础之15:位操作